Oracle SQL:使用 LIKE 运算符进行模式匹配以发现两个单词模式

Oracle SQL : Pattern matching using LIKE operator to discover two word patterns

我正在尝试弄清楚如何查询列中的双词模式,如 "allergic response" 或 "allergy 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