使用like或regex在oracle中查找带或不带空格的字符串

时间:2016-04-18 07:56:20

标签: regex oracle

我有一个字符串,其中包含特定的“赢家代码”,需要完全匹配,但在数据库中,某些记录在“获胜者代码”中包含空格和额外字符,如果我使用“喜欢运算符”,则只返回匹配条件。我想使用一个简化的查询,如果它包含赢家代码,它可以返回所有记录。请在下面查找我的查询和详细信息

获胜者代码 - أ4ب3ج10

以空格记录 - أ4ب3ج10

带有额外字符的记录 - (أ(4)ب(3)ج(10

我的查询 - SELECT COLUMN_NAME, FROM TABLE_NAME WHERE ((COLUMN_NAME LIKE '%أ4%ب3%ج10%') or(COLUMN_NAME LIKE '%أ 4%ب 3%ج 10%'))

上述查询返回带有和不带空格数据的匹配条件。

谢谢

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的需要,您可以尝试:

with test(str) as (
    select '10X3Y4Z' from dual union all
    select '10 X 3 Y 4 Z' from dual union all
    select '(10)X(3)Y(4)Z' from dual union all
    select '10@X3Y4  Z' from dual union all
    select '10 @ X3Y4Z' from dual )
select str
from test
where regexp_instr(str, '10[ |\)]{0,1}X[ |\(]{0,1}3[ |\)]{0,1}Y[ |\(]{0,1}4[ |\)]{0,1}Z') != 0

这匹配您的“赢家代码”(我使用不同的字符来简化我的测试),即使数字被'()'或单个空格包围。 这可以用更紧凑的方式重写,但我相信这种形式足够清晰;它使用像[ |\)]{0,1}这样的正则表达式来匹配空格或括号,只有零或一次出现。