2012-05-04 28 views
0

我试图找到与某个指纹匹配的所有内容,但是Oracle的通配符并不十分精确。Oracle SQL自定义通配符

这指纹是:WHERE符号LIKE '%_ #### @' ESCAPE '\'

在哪里都无所谓之前会发生什么(%通配符)
接下来是下划线(逃脱“\”)
然后是四个数字(#)
最后一个字符AZ(@)

我发现了一些东西使用翻译功能,但我一直没能使其工作。现在我正在研究正则表达式,但我从未使用过它们。我试图了解他们是什么以及他们将如何解决我的问题。

回答

2

这听起来像你想使用正则表达式,而不是喜欢。您的“指纹”似乎被正则表达式[_][[:digit:]]{4}[A-Z]捕获,因此您可以使用regexp_instr来确定指纹是否存在(以及它的字符串中的位置)。在这种情况下,字符串“_1234B”是所述第一字符串中的指纹,并且开始于位置7

SQL> ed 
Wrote file afiedt.buf 

    1 with x as (
    2 select 'sb1234_1234Bdelta' str from dual union all 
    3 select 'no match' from dual 
    4 ) 
    5 select str, 
    6   regexp_instr(str, '[_][[:digit:]]{4}[A-Z]') 
    7 from x 
    8* where regexp_instr(str, '[_][[:digit:]]{4}[A-Z]') > 0 
SQL>/

STR    REGEXP_INSTR(STR,'[_][[:DIGIT:]]{4}[A-Z]') 
----------------- ------------------------------------------ 
sb1234_1234Bdelta           7 
+0

也将是可能的使用'REGEXP_LIKE'条件where子句中而不是'REGEXP_INSTR'功能。 –