我有一个字符串,其中包含特定的“赢家代码”,需要完全匹配,但在数据库中,某些记录在“获胜者代码”中包含空格和额外字符,如果我使用“喜欢运算符”,则只返回匹配条件。我想使用一个简化的查询,如果它包含赢家代码,它可以返回所有记录。请在下面查找我的查询和详细信息
获胜者代码 - أ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%'))
上述查询返回带有和不带空格数据的匹配条件。
谢谢
答案 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}
这样的正则表达式来匹配空格或括号,只有零或一次出现。