Oracle SQL:使用 LIKE 运算符进行模式匹配以发现两个单词模式
Oracle SQL : Pattern matching using LIKE operator to discover two word patterns
我正在尝试弄清楚如何查询列中的双词模式,如 "allergic response" 或 "allergy response"。我尝试了以下
LIKE '% allerg% response %'
但这匹配像“Allergic
2010 年 1 月 1 日的反应....还没有反应...."
尝试了单词边界LIKE '% \ballerg%\b response %'
。这个
表达好像不对。从未工作过
基本上,我希望匹配连续的单词,其中一个单词可以有多个值。我真的不想在 LIKE '..' OR LIKE '..'
中列出所有可能的值。
有人可以告诉我如何解决这个问题吗?
您可以使用或运算符 |
并将备选方案分组在括号内
对于您的示例,您需要以下正则表达式:
allerg(ic|y) response
所以你的查询变成这样:
... WHERE REGEXP_LIKE (col_name, 'allerg(ic|y) response', 'i');
删除区分大小写匹配的'i'
参数
附带说明一下,奇怪的是,oracle 没有单词边界正则表达式运算符!! => source
您可以使用正则表达式\S*
(零个或多个非白色-space字符)或\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
我正在尝试弄清楚如何查询列中的双词模式,如 "allergic response" 或 "allergy response"。我尝试了以下
LIKE '% allerg% response %'
但这匹配像“Allergic 2010 年 1 月 1 日的反应....还没有反应...."尝试了单词边界
LIKE '% \ballerg%\b response %'
。这个 表达好像不对。从未工作过
基本上,我希望匹配连续的单词,其中一个单词可以有多个值。我真的不想在 LIKE '..' OR LIKE '..'
中列出所有可能的值。
有人可以告诉我如何解决这个问题吗?
您可以使用或运算符 |
并将备选方案分组在括号内
对于您的示例,您需要以下正则表达式:
allerg(ic|y) response
所以你的查询变成这样:
... WHERE REGEXP_LIKE (col_name, 'allerg(ic|y) response', 'i');
删除区分大小写匹配的'i'
参数
附带说明一下,奇怪的是,oracle 没有单词边界正则表达式运算符!! => source
您可以使用正则表达式\S*
(零个或多个非白色-space字符)或\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