2015-11-25 121 views
0

我有中獲取正確的數據列的麻煩,使用正則表達式在甲骨文11「正則表達式樣」 Oracle中返回結果不準確

列是varchar類型,看起來像這樣:

2216xxxx 
20xxxx 
2355xxxx 
2128xxxx 
213xxxx 
692xxxx 

我使用的查詢的該部分:

regexp_like (column_name, '^(?216*|?213*|?218*|?212*|?249*|?20*)') 

以濾除與20,216,213,218,與這些前綴開始212和249,或者開始的行,之前是2(例如。 220,2216,2213等),但在結果中,我也獲得了以2355開始的記錄。

我確信我對正則表達式犯了一些錯誤,但我無法找到它。

一些幫助將不勝感激。

P.S

我知道我可以用一系列的「or column_name like...」去,但我認爲使用regexs會是一個更好的解決方案

+1

''表示? 「0或1的一個組或字符 - 嘗試刪除所有'?',看看會發生什麼 –

+0

@MacroMan我試圖刪除它,但我仍然從2355開始獲取這些記錄。當我第一次添加?時,我想包括2,在某些情況下碰巧是這樣,而在另一些情況下則不是...... – gm08

回答

1

您使用?*不正確。用這個來代替:

^(216.*|213.*|218.*|212.*|249.*|20.*) 

你不需要?,你需要使用.*這意味着「任何字符(除新行),零和無限次量之間」

+0

這次它刪除了不需要的記錄,即以'2355'開頭的記錄,但它也刪除了我想包含的記錄,一個人使用上面的前綴,但在開始處有一個數字「2」。簡而言之,我想要所有以'216'或'2216'開始的記錄,等等...... – gm08

+0

在組前添加一個可選項2。''^(2)?(216. * | 213 * | 218 * | 212 * | 249 * | 20 *)''。徹底測試! –

+1

爲什麼重複'。*'和'2'這麼多次? ' '^ 2 2?(16 | 13 | 18 | 12 | 49 | 0)。*''。或甚至是'^ 2?2(1 [6382] | 49 | 0)。'' –

相關問題