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

使用like或regex在oracle中查找带或不带空格的字符串,regex,oracle,Regex,Oracle,我有一个字符串,其中包含需要精确匹配的特定“winner code”,但在数据库中,某些记录在“winner code”中包含空格和额外字符,如果我使用“like operator”,它只返回匹配条件。我想使用一个简化的查询,如果它包含赢家代码,可以返回所有记录。请在下面找到我的查询和详细信息 赢家代码-أ4ب3ج10 带空格的记录-أ4ب3㶹10 带额外字符的记录-(أ(4)
ب(3)
ج(10) 我的问题- 选择列名称, 从表\u名称 哪里 ((列名称,如'%4%列名称,如'%3%列名称,如

我有一个字符串,其中包含需要精确匹配的特定“winner code”,但在数据库中,某些记录在“winner code”中包含空格和额外字符,如果我使用“like operator”,它只返回匹配条件。我想使用一个简化的查询,如果它包含赢家代码,可以返回所有记录。请在下面找到我的查询和详细信息

赢家代码-أ4ب3ج10

带空格的记录-أ4ب3㶹10

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

我的问题-
选择列名称,
从表\u名称
哪里
((列名称,如'%4%列名称,如'%3%列名称,如'%10%')或(列名称,如'%4%列名称,如'%3%列名称,如'%10%'))

上面的查询返回与条件匹配的空间数据和不匹配的空间数据


谢谢

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

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}
这样的正则表达式来匹配空格或圆括号,出现次数为零或一次