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

时间:2016-10-06 22:32:58

标签: sql arrays postgresql

来自(脚本)编程语言,我不明白为什么工作

SELECT regexp_matches('hello world', '(he).*(wo)', 'g')[1];

添加额外的括号 工作(至少在Postgres中)。

SELECT (regexp_matches('hello world', '(he).*(wo)', 'g'))[1];

我会假设在两种情况下都访问regexp_matches返回的数组,但我想这里缺乏对SQL的语法理解。

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

1 个答案:

答案 0 :(得分:3)

括号的precedence非常高,因此您的查询会被解析为

SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1]);

这没有意义,你想在调用regexp_matches()的结果上应用索引,所以你必须添加括号来对regexp_matches调用进行分组。

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