2016-03-09 56 views
0

我有一個查詢,我在Access數據庫中用來匹配一個字段。我要檢索的行有一個包含字符的兩種可能的形式(不區分大小寫)的序列的字段:Oracle中的REGEXP_LIKE

  • *PO12345,5位之前通過*PO,或
  • PO12345,前面加PO 5個位數。

在訪問我實現了這個:

WHERE MyField LIKE '*PO#####*' 

我試圖複製使用的查詢在Oracle數據庫中:

WHERE REGEXP_LIKE(MyField, '/\*+PO[\d]{5}/i') 

但是,它不返回任何東西。我已經稍微修改了正則表達式,例如將括號放在PO左右,但無濟於事。據我所知,我寫的是正確的。

+0

有五位數。 –

+0

我認爲它應該是'WHERE REGEXP_LIKE(MyField,'\ *?PO \ d {6}')' –

+0

我剛編輯過這個問題 - 我應該在問題中說5位數字。請原諒我的匆忙。 – monster

回答

4

您的正則表達式\*+PO[\d]{5}是錯誤的。 \*之後不應該有+,因爲它是可選的。

使用?像這樣/\*?PO\d{5}/i解決了這個問題。

使用i(不區分大小寫)作爲參數是這樣的:REGEXP_LIKE (MyField, '^\*?PO\d{5}$', 'i');

Regex101 Demo

Read REGEXP_LIKE documentation.

+0

是的,抱歉,我不知道我爲什麼使用'+'代替'?';但是,它仍然沒有返回。 – monster

+1

我也會添加開始和結束錨點,所以'REGEXP_LIKE(myfield,'^ \ *?PO \ d {5} $','i')' - 否則正則表達式會匹配像'ABCD * PO1234567890'等字符串 –

+0

@DavidFaber'* PO12345'在某個地方;它並不構成整個領域。 – monster