2013-11-22 34 views
1

我有一個varchar colunm。與內容Oracle之間不會返回

ColumnX 
________ 
ABC 
DEF 
1 
2 
3 
4 
40 
50 

我需要得到數量和4之間。1,所以我有這樣的SQL

SELECT columnX 
FROM table 
WHERE regexp_substr(columnX, '[[:digit:]]') BETWEEN 1 and 4; 

但我的結果我得到的是1,2,3,4和40 該當我做對了嗎?

+1

看起來像正則表達式是隻檢查的第一個字符或列,你能不能展開,以確保只檢查1個字符(即不符合超過1的項目)? – Charleh

+0

是的,當我設置在1和5之間時,我也獲得了額外的50。 – user1761160

回答

1

您必須使用量詞來匹配多個字符。在這種情況下,我使用了+量詞,它匹配一個或多個字符(本例中爲數字)。

試試這個:

WITH 
    test_data AS 
    (SELECT 'ABC' AS columnX FROM dual 
    UNION ALL SELECT '1' FROM dual 
    UNION ALL SELECT '2' FROM dual 
    UNION ALL SELECT '3' FROM dual 
    UNION ALL SELECT '4' FROM dual 
    UNION ALL SELECT '40' FROM dual 
    UNION ALL SELECT '50' FROM dual 
) 
SELECT columnX 
    FROM test_data 
WHERE regexp_substr(columnX, '[[:digit:]]+') BETWEEN 1 AND 4; 

輸出:

COLUMNX 
------- 
1  
2  
3  
4
+0

我的問題是,數量可以增加到100。我必須添加100行? – user1761160

+0

謝謝它,如果我添加+符號。謝謝 – user1761160

相關問題