从(脚本)的编程语言来了,我不明白为什么这 不 工作
SELECT regexp_matches('hello world', '(he).*(wo)', 'g')[1];
同时添加其他括号 确实 有效(至少在Postgres中有效)。
SELECT (regexp_matches('hello world', '(he).*(wo)', 'g'))[1];
我本来以为regexp_matches在两种情况下都可以访问返回的数组,但是我想这里缺少我对SQL的语法理解。
regexp_matches
那么为什么需要括号呢?
方括号具有很高的优先级,因此您的查询被解析为
SELECT regexp_matches(('hello world', '(he).*(wo)', 'g')[1]);
这没有任何意义,您希望将索引应用于call的结果regexp_matches(),因此您必须添加括号以对regexp_matches调用进行分组。
regexp_matches()
(请注意,这两个字符[]是方括号,您添加了括号,而不是方括号