在 PostgreSQL 9 中使用 LIKE/ILIKE 运算符时,是否可以匹配单词边界而不必使用完整的 ~ 运算符正则表达式?
例如
SELECT 'Super fast training' ILIKE '%train\M%' as match;
其中 \M 是单词末尾的边界,匹配返回false
谢谢,
标记
在 PostgreSQL 9 中使用 LIKE/ILIKE 运算符时,是否可以匹配单词边界而不必使用完整的 ~ 运算符正则表达式?
例如
SELECT 'Super fast training' ILIKE '%train\M%' as match;
其中 \M 是单词末尾的边界,匹配返回false
谢谢,
标记
你可以用以下技巧来做到这一点:
选择“”|| '超快速训练' ILIKE '%train %'
但我不认为这是个好主意。您可以改用正则表达式或 PostgreSQL 全文。PostgreSQL 正则表达式并不比 ILIKE 或 LIKE 慢很多。
在我的情况下它有帮助:
WITH phrase_to_match AS (
SELECT 'Super fast training' AS phrase
UNION ALL
SELECT 'Super fast train' AS phrase
)
SELECT ' ' || phrase || ' ' ILIKE '% train %'
FROM phrase_to_match
短语和匹配短语的开头和结尾的空格是必要的。没有空格就不能正常工作。
这个例子比我们使用~*
运算符时运行得更快。