来自(脚本)编程语言,我不明白为什么不工作
SELECT regexp_matches('hello world', '(he).*(wo)', 'g')[1];
添加额外的括号 工作(至少在Postgres中)。
SELECT (regexp_matches('hello world', '(he).*(wo)', 'g'))[1];
我会假设在两种情况下都访问regexp_matches
返回的数组,但我想这里缺乏对SQL的语法理解。
那么为什么我们需要括号?
答案 0 :(得分:3)
括号的precedence非常高,因此您的查询会被解析为
SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1]);
这没有意义,你想在调用regexp_matches()
的结果上应用索引,所以你必须添加括号来对regexp_matches调用进行分组。
(注意这两个字符[]是括号,你添加了括号,而不是括号