Sql 为什么访问函数返回的数组(在SELECT中)时需要添加括号?

Sql 为什么访问函数返回的数组(在SELECT中)时需要添加括号?,sql,arrays,postgresql,Sql,Arrays,Postgresql,来自脚本编程语言,我不明白为什么这不起作用 而添加附加括号至少在Postgres中有效 SELECT (regexp_matches('hello world', '(he).*(wo)', 'g'))[1]; 我假设在这两种情况下都可以访问regexp_matches返回的数组,但我想我对SQL的语法理解还不够 那么为什么我们需要括号呢?括号的值很高,因此您的查询被解析为 SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1])

来自脚本编程语言,我不明白为什么这不起作用

而添加附加括号至少在Postgres中有效

SELECT (regexp_matches('hello world', '(he).*(wo)', 'g'))[1];
我假设在这两种情况下都可以访问regexp_matches返回的数组,但我想我对SQL的语法理解还不够


那么为什么我们需要括号呢?

括号的值很高,因此您的查询被解析为

SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1]);
这没有意义,您希望对调用regexp\u匹配的结果应用索引,因此必须添加括号来对regexp\u匹配调用进行分组


注意这两个字符[]是括号,您添加了括号,而不是括号

我可能是肛门-但您没有添加括号,您添加了括号-[]是括号,就像[1]中的括号一样brackets@mageeworlduups。在德语中,括号和括号是同一个词。谢谢更正了。
SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1]);