2012-05-04 89 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'功能。 –