2014-06-05 59 views
0

REGEXP_LIKE documentation似乎表明Oracle支持POSIX字符類。當我運行以下兩個查詢時,我期望後者返回前者的子集,因爲[:alpha:][A-Z]的超集。相反,當使用[:alpha:]版本時,我沒有得到任何結果。Oracle POSIX支持REGEXP_LIKE

我看到POSIX的支持是在10g中添加,但我們正在運行11g第2版

查詢1:

SELECT DISTINCT offer_id FROM fop WHERE REGEXP_LIKE (offer_id, '^01[:alpha:].*'); 

查詢2:

SELECT DISTINCT offer_id FROM fop WHERE REGEXP_LIKE (offer_id, '^01[A-Z].*') 
+0

的'*'在結束除了爲正則表達式引擎做更多的工作之外,你的模式不會做任何事情。 – pilcrow

+0

你是說REGEXP_LIKE試圖在字段中查找模式,而不是試圖確定字段是否匹配模式? –

+0

不,我的意思是'。*'在你的正則表達式的結尾意味着「匹配什麼或者什麼都不匹配」,因此沒有用。 '^ ora。*'將與'^ ora'匹配相同的輸入,不多也不少,除了前者會導致正則表達式引擎檢查每個輸入到最後。 – pilcrow

回答

3

你必須使用這種字符集的雙方括號:

SELECT DISTINCT offer_id FROM fop WHERE REGEXP_LIKE (fop.offer_id, '^01[[:alpha:]].*'); 
+0

「方括號」: [:括號 (:括號 {:Brace –

3

在POSIX正則表達式的其他用途,該[:alpha:]是一個獨立的「令牌」仍然需要成爲焦炭類括號內,所以儘量

SELECT DISTINCT offer_id FROM fop 
WHERE REGEXP_LIKE (fop.offer_id, '^01[[:alpha:]].*'); 

IHTH