我有以下的正則表達式:SQL返回結果爲以下的正則表達式
WHERE A.srvc_call_id = '40750564' AND REGEXP_LIKE (A.SRVC_CALL_DN, '[^TEST]')
包含40750564該行有列「測試呼叫」 SRVC_CALL_DN
和REGEXP_LIKE
似乎並沒有被篩選出來。每當我運行查詢時,它都會返回不應該的行。
我的正則表達式模式錯了嗎?或者SQL不接受[^whatever]
?
我有以下的正則表達式:SQL返回結果爲以下的正則表達式
WHERE A.srvc_call_id = '40750564' AND REGEXP_LIKE (A.SRVC_CALL_DN, '[^TEST]')
包含40750564該行有列「測試呼叫」 SRVC_CALL_DN
和REGEXP_LIKE
似乎並沒有被篩選出來。每當我運行查詢時,它都會返回不應該的行。
我的正則表達式模式錯了嗎?或者SQL不接受[^whatever]
?
克拉錨表達式的字符串的開始。通過在您正在搜索的方括號中包含字母T,E,S & T,因爲barsju suggests對於任何這些字符,而不是字符串TEST。
你說SRVC_CALL_DN
包含字符串'TEST CALL'
,但你不說在字符串的哪裏。你也說你在找這個字符串不是匹配的地方。這意味着要使用not regexp_like(...
把所有這些組合起來,我認爲你需要:
AND NOT REGEXP_LIKE (A.SRVC_CALL_DN, '^TEST[[:space:]]CALL')
這排除每場比賽從您那裏查詢字符串開始與'TEST CALL'
。但是,如果該字符串可能位於列中的任何位置,則需要刪除克拉 - ^
。
這也假設字符串總是大寫。如果混合大小或更低,則需要再次更改。像下面這樣:
AND NOT REGEXP_LIKE (upper(A.SRVC_CALL_DN), '^TEST[[:space:]]CALL')
通過上部外殼SRV_CALL_DN
可以確保你總是會匹配,但確保您的查詢可能不會在該列使用索引。我不擔心這個特殊點,因爲正則表達式查詢在使用索引時可能相當差,並且看起來好像SRVC_CALL_ID
已被編入索引。
另外,如果它可能不包括'CALL'
你將不得不刪除這個。最好使用正則表達式使匹配模式儘可能明確;所以如果可以的話包括'CALL'
。
試着用'^TEST'
或'^TEST.*'
你的正則表達式是指任何字符串沒有開始任何字符:T,E,S,T。
但是你的情況非常簡單,從TEST開始。爲什麼不用一個簡單的像:
LIKE 'TEST%'
+1我是如此專注於我不認爲像的正則表達式! – Ben 2012-04-04 18:57:10
啊。這聽起來正確..我以爲他使用^作爲行的開始。 – barsju 2012-04-04 18:51:55
我的意圖是排除任何與SRVC_CALL_DN「測試」行。我用你的建議與非REGEXP_LIKE,哪個工作!謝謝 ! – Kyle 2012-04-05 12:18:17