我有一個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 該當我做對了嗎?
我有一個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 該當我做對了嗎?
您必須使用量詞來匹配多個字符。在這種情況下,我使用了+
量詞,它匹配一個或多個字符(本例中爲數字)。
試試這個:
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
我的問題是,數量可以增加到100。我必須添加100行? – user1761160
謝謝它,如果我添加+符號。謝謝 – user1761160
看起來像正則表達式是隻檢查的第一個字符或列,你能不能展開,以確保只檢查1個字符(即不符合超過1的項目)? – Charleh
是的,當我設置在1和5之間時,我也獲得了額外的50。 – user1761160