請嘗試以下時,SQL小提琴here
with names as ( SELECT REGEXP_SUBSTR (regexp_replace('aa = b, bb = c , eee = d','[[:space:]]*',''), '[^=]+', 1, level) as name FROM DUAL CONNECT BY LEVEL <= (SELECT REGEXP_COUNT ('a = b, b = c , e = d ', '=') FROM DUAL)) select nvl(regexp_substr(name,'[^,]+',1,2),regexp_substr(name,'[^,]+',1,1)) from names;
Update1: - 您可以用逗號替換新行
在Unix上,LINEFEED(chr(10))是「行尾」標記。 在窗戶回車/換行(CHR(13)|| CHR(10))應行標記結束
with names as
(
SELECT REGEXP_SUBSTR (regexp_replace(replace('aa = black' ||chr(13)||chr(10)||'bb = change'||chr(13)||chr(10)||'mmmm=no',chr(13)||chr(10),','),'[[:space:]]*',''),
'[^=]+',
1,
level) as name
FROM DUAL
CONNECT BY LEVEL <= (SELECT REGEXP_COUNT
('aa = black' ||chr(13)||chr(10)||'bb = change'||chr(13)||chr(10)||'mmmm=no', '=')
FROM DUAL)
)
select nvl(regexp_substr(name,'[^,]+',1,2),
regexp_substr(name,'[^,]+',1)) from names;
謝謝。您的解決方案適用於以逗號分隔的示例。 (如在我的問題SQL),但我需要'換行'分隔的例子。 – Tony
提供了處理換行符的更新 – psaraj12
另一個使用您的答案的問題是http://stackoverflow.com/q/27602170/2023524。 – Tony