【问题标题】:ILIKE Match Word Boundaries PostgreSQL 9ILIKE 匹配词边界 PostgreSQL 9
【发布时间】:2013-08-07 10:55:38
【问题描述】:
在 PostgreSQL 9 中使用 LIKE/ILIKE 运算符时,是否可以匹配单词边界而无需使用完整的 ~ 运算符正则表达式?
例如
SELECT 'Super fast training' ILIKE '%train\M%' as match;
其中 \M 是单词末尾的边界,匹配返回 false
谢谢,
标记
【问题讨论】:
标签:
sql
postgresql
full-text-search
postgresql-9.1
postgresql-9.0
【解决方案1】:
你可以通过以下技巧做到这一点:
选择“”|| '超快速训练' ILIKE '%train %'
但我不认为这是个好主意。您可以改用正则表达式或 PostgreSQL 全文。 PostgreSQL 正则表达式并不比 ILIKE 或 LIKE 慢很多。
【解决方案2】:
这对我有帮助:
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
短语和匹配短语的开头和结尾的空格是必需的。没有空格就不能正常工作。
这个例子比我们使用~* 运算符时运行得更快。
P.S.:感谢https://stackoverflow.com/a/29798772/2997850