2013-06-24 54 views
-3

我有以下代碼,它使用regexp_like(),但是當我將exp:^[0-5]\.[\d]+$寫入regexp_like()時,它不會返回正確的結果。REGEXP_LIKE AND REGEXP_INSTR使用哪一個

我應該用regexp_instr嗎?

我該如何知道,哪一個使用?

+8

那麼,如果你不給我們你使用的語言,什麼是輸入和你想要做什麼,沒有人可以幫助你。 –

回答

0

這裏只是一個猜測,但我認爲regexp_like已經錨定在開始和結束,否則regexp_instr將是多餘的。

+0

它不是固定的,它是REGEXP_LIKE,它是多餘的,但它更清楚它在做什麼。 – Ben

0

我不確定您的正則表達式引擎是否支持\d字符類。嘗試這些語法代替(與REGEXP_LIKE)

^[0-5]\.[0-9]+$ 

^[0-5]\.[[:digit:]]+$ 
+0

它支持POSIX和類似Perl的語法,包括'\ d'。 – Ben

0

在Oracle REGEXP_LIKEconditionREGEXP_INSTRfunction

您通常使用WHERE條款和a few other places條款。您可以使用任何表達式中的函數。

沒有更多的細節,很難說哪一個更適合您的情況,但最終他們兩個完全一樣。結果的表示當然是不同的,因爲上面的鏈接,你必須考慮到這一點。

+0

雖然它在文檔中被描述爲一個條件,但它是一個返回布爾值的函數:http://www.sqlfiddle.com/#!4/d41d8/12698。它不能在WHERE子句之外的普通SQL語句中使用,因爲Oracle不支持SQL中的布爾數據類型。 – Ben

1

它們是不同目標的兩種不同功能,因此您應該使用最適合您情況的功能。

  • REGEXP_LIKE()返回布爾只能在WHERE子句中使用,當你想要返回匹配條件的行它的使用。

  • REGEXP_INSTR()返回一個整數,表示匹配的子串的開始或結束。它不必在WHERE子句中使用。

    本質上,where regexp_instr(...,...) > 0與REGEXP_LIKE完全相同,但它可以在更多情況下使用。

請閱讀兩者的鏈接文檔。

至於爲什麼你的條件沒有返回正確的結果,這是因爲你的正則表達式沒有充分描述你想要返回的行。