gpt4 book ai didi

sql - 为什么 postgres 中的数组索引需要括号?

转载 作者:行者123 更新时间:2023-11-29 12:55:31 25 4
gpt4 key购买 nike

在 (postgres) SQL 中,这是有效的语法,

select (array[ [1,2,3], [4,5,6]])[1];

但不是:

select array[ [1,2,3], [4,5,6]][1];

...这让我有点惊讶。这是怎么回事?

最佳答案

这是一个解析器问题。 PostgreSQL 使用 Bison parser - 需要额外的括号来防止解析冲突。查询处理分几个阶段:解析、分析、计划和执行。解析时间中没有足够的信息来保护 bison 免受可能的碰撞,因此某些语法是不允许的。

因为数组是专有的 PostgreSQL 特性(非常成功)并且 ANSI 没有描述语法,所以开发人员更喜欢一些折衷的设计,比如对用户来说足够好并且不需要太复杂的代码。 PostgreSQL 的重点是 SQL 而不是数组处理。 Bison 是非常好的成熟工具,但有时由于速度要求,某些语法很难或不可能。

select array[ [1,2,3], [4,5,6]]::int[][1]

如果你知道一个事实就没有任何魔法,所以数组类型定义中的限制只是语法糖。 int[],int[1],int[] [100]就是int[]。然后 array[ [1,2,3], [4,5,6]]::int[][1]array[ [1,2,3], [4,5,6]]::int[] .. 取一个数值数组并将其转换为整数数组。

关于sql - 为什么 postgres 中的数组索引需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com