PostgreSQL 中的正则表达式 LIKE 子句:使用 LIKE 与 ~ 运算符
在 PostgreSQL 中,您可以利用正则表达式来搜索特定模式数据内。但是,如果您遇到表达式问题,则必须了解其中的细微差别和限制。
挑战:第三个字符不匹配
考虑以下查询:
SELECT * FROM table WHERE value LIKE '00[1-9]%' -- (third character should not be 0)
尽管其意图排除第三个字符为“0”的任何值,但此查询将不符合该标准。相反,它匹配任何以 '00' 开头的值。
解决方案:使用 ~ 运算符
要有效地利用括号表达式,我们必须使用正则表达式运算符~:
SELECT * FROM tbl WHERE value ~ '^00[^0]'
^ ... 表示字符串的开头,确保模式仅在开始。
1 ... 表示匹配除“0”之外的任何内容的字符类。
优化方法
为了获得最佳性能,请考虑将查询分成两个 LIKE表达式:
SELECT * FROM tbl WHERE value LIKE '00%' -- starting with '00' AND value NOT LIKE '000%' -- third character is not '0'
LIKE 不如正则表达式有效,但通常更快。通过使用经济的 LIKE 表达式限制候选者,我们提高了整体查询速度。
此外,利用左锚定表达式(例如 value LIKE '00%')至关重要,因为它们可以利用 PostgreSQL 中的索引。这对于大型表特别有利,而更复杂的正则表达式可能不支持索引。
以上是PostgreSQL 字符串匹配:LIKE 与 ~ 高效正则表达式查询?的详细内容。更多信息请关注PHP中文网其他相关文章!