我想从数据库中查询可能以替换列表中的任何单词开头的行。例如,查询名称 blue tree house
将返回以下记录 the blue tree house
或者 le blue tree house
或者 A blue tree house
.
我尝试如下查询:
SELECT NAME
FROM NAMES
WHERE (lower(names.name) ~ '^(no.?)*\s*\d*\s*\W*(an|the|le|leur|ils|a)?(blue)\W*\s*\y') AND
(lower(names.name) ~ ' \yhouse ?\y')
这里的小提琴与其他例子和设置。
1条答案
按热度按时间z31licg01#
由于字符串的结尾是常量,我建议您反向搜索,这样可以有效地使用匹配索引:
您可能希望禁止在中使用尾随(和前导)空格
name
.然后:
db<>在这里摆弄
你的“候补名单”完整吗?我添加了一个表达式来涵盖您提供的所有示例。
值得注意的是:
(?:no.?\s*)?
(?:)
... 捕获型括号\.
... 文字点需要转义反斜杠?
... 0或1次(如您所拥有的,示例不需要)