我有以下代碼,它使用regexp_like()
,但是當我將exp:^[0-5]\.[\d]+$
寫入regexp_like()
時,它不會返回正確的結果。REGEXP_LIKE AND REGEXP_INSTR使用哪一個
我應該用regexp_instr
嗎?
我該如何知道,哪一個使用?
我有以下代碼,它使用regexp_like()
,但是當我將exp:^[0-5]\.[\d]+$
寫入regexp_like()
時,它不會返回正確的結果。REGEXP_LIKE AND REGEXP_INSTR使用哪一個
我應該用regexp_instr
嗎?
我該如何知道,哪一個使用?
這裏只是一個猜測,但我認爲regexp_like
已經錨定在開始和結束,否則regexp_instr
將是多餘的。
它不是固定的,它是REGEXP_LIKE,它是多餘的,但它更清楚它在做什麼。 – Ben
我不確定您的正則表達式引擎是否支持\d
字符類。嘗試這些語法代替(與REGEXP_LIKE):
^[0-5]\.[0-9]+$
或
^[0-5]\.[[:digit:]]+$
它支持POSIX和類似Perl的語法,包括'\ d'。 – Ben
在Oracle REGEXP_LIKE是condition和REGEXP_INSTR是function。
您通常使用WHERE
條款和a few other places條款。您可以使用任何表達式中的函數。
沒有更多的細節,很難說哪一個更適合您的情況,但最終他們兩個完全一樣。結果的表示當然是不同的,因爲上面的鏈接,你必須考慮到這一點。
雖然它在文檔中被描述爲一個條件,但它是一個返回布爾值的函數:http://www.sqlfiddle.com/#!4/d41d8/12698。它不能在WHERE子句之外的普通SQL語句中使用,因爲Oracle不支持SQL中的布爾數據類型。 – Ben
它們是不同目標的兩種不同功能,因此您應該使用最適合您情況的功能。
REGEXP_LIKE()
返回布爾只能在WHERE子句中使用,當你想要返回匹配條件的行它的使用。
REGEXP_INSTR()
返回一個整數,表示匹配的子串的開始或結束。它不必在WHERE子句中使用。
本質上,where regexp_instr(...,...) > 0
與REGEXP_LIKE完全相同,但它可以在更多情況下使用。
請閱讀兩者的鏈接文檔。
至於爲什麼你的條件沒有返回正確的結果,這是因爲你的正則表達式沒有充分描述你想要返回的行。
那麼,如果你不給我們你使用的語言,什麼是輸入和你想要做什麼,沒有人可以幫助你。 –