REGEXP_SUBSTR只返回一個值。你可以把你的字符串變成一個僞表,然後查詢匹配。有逃逸我目前這樣做的一個基於XML的方式,但使用連接,通過作品,只要你只有一個源字符串:
SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1;
...給你:
SUBSTR
--------------------
Txa233141b
Ta233141
Ta233142
Ta233147
Ta233148
...你可以過濾,與原有模式的稍微簡單一些的版本:
SELECT substr
FROM (
SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, LEVEL) AS substr
FROM (
SELECT 'Txa233141b Ta233141 Ta233142 Ta233147 Ta233148' AS str
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str, '[^ ]+')) + 1
)
WHERE REGEXP_LIKE(substr, '^[A-Za-z]{2}[0-9]{5,}$');
SUBSTR
--------------------
Ta233141
Ta233142
Ta233147
Ta233148
這是不是很漂亮,但沒有在一個領域是持有多個值。
非常感謝。這對我幫助很大。 – florins
此代碼不返回Ta233148。 (REGEXP_REPLACE(str,'[^] +'))以CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(str,'[^] +'))+ 1 – sakthi
直接使用此代碼除了簡單的分割字符之外的任何東西都會返回許多結果。 用REGEXP_COUNT(str,'[^] +')替換LENGTH(REGEXP_REPLACE(str,'[^] +'))+ 1,您將得到預期的結果。 – bkqc