我正在试图弄清楚如何查询列中的“过敏反应”或“过敏反应”这样的双字模式。我尝试了下面的
LIKE '% allerg% response %'
但这会匹配像“过敏”这样的字符串
2010年1月1日的反应....还没有回应....“
尝试过单词边界LIKE '% \ballerg%\b response %'
。这个
表达似乎是错误的。从来没有工作
基本上我希望匹配连续的单词,其中一个单词可以占用很多值。我真的不想在LIKE '..' OR LIKE '..'
列出所有可能的值。
有人可以给我一些关于如何解决这个问题的建议吗?
答案 0 :(得分:1)
您可以使用或运算符|
并将括号内的备选项分组
对于您的示例,您需要以下正则表达式:
allerg(ic|y) response
所以你的查询就像:
... WHERE REGEXP_LIKE (col_name, 'allerg(ic|y) response', 'i');
删除区分大小写匹配的'i'
参数
作为旁注,oracle好奇地没有单词边界正则表达式操作符!! => source
答案 1 :(得分:0)
您可以使用正则表达式\S*
(零或多个非空格字符)或\w*
(零个或多个单词字符)来匹配单词的任何结尾:
WITH phrases ( phrase ) AS (
SELECT 'Allergic Response' FROM DUAL UNION ALL
SELECT 'Allergy response' FROM DUAL UNION ALL
SELECT 'Allergy gives a response to ...' FROM DUAL
)
SELECT phrase
FROM phrases
WHERE REGEXP_LIKE( phrase, 'Allerg\S* response', 'i' );
<强>输出强>:
PHRASE
----------------------
Allergic Response
Allergy response