一尘不染

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

sql

从(脚本)的编程语言来了,我不明白为什么这 工作

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

同时添加其他括号 确实 有效(至少在Postgres中有效)。

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

我本来以为regexp_matches在两种情况下都可以访问返回的数组,但是我想这里缺少我对SQL的语法理解。

那么为什么需要括号呢?


阅读 189

收藏
2021-03-08

共1个答案

一尘不染

方括号具有很高的优先级,因此您的查询被解析为

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

这没有任何意义,您希望将索引应用于call的结果regexp_matches(),因此您必须添加括号以对regexp_matches调用进行分组。

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

2021-03-08