我正在使用REGEXP_SUBSTR()
從逗號分隔列表中返回第n個值。當所有值都存在時,這可以正常工作,但如果項目爲空,則失敗。這裏是工作的所有值都存在,我選擇1個或多個字符的第二個出現的是不是一個逗號的例子:REGEX從列表中選擇第n個值,允許爲空
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data
2 from dual;
D
-
2
但是,當第二個值是零,我真是越來越第三列表中的項目,當然這確實是第二次出現的一個或多個不是逗號的字符。不過,我需要它返回NULL作爲第二個項目是空的:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data
2 from dual;
D
-
3
如果我改變了正則表達式來允許零個或多個字符,而不是1以上,也未能對過去空號:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
2 from dual;
D
-
3
我需要允許null,但似乎無法得到正確的語法。從邏輯上講,我需要返回第n次逗號之前的數據是否存在(並允許最後一個值)。有任何想法嗎?
這是一個重複。用空值解析csv字符串是一個常見問題(例如http://stackoverflow.com/questions/25529511/oracle-regex-substr-not-honoring-null-values/25530536#25530536)。我偏向於我的解決方案(用逗號在字符串前面,讓你的正則表達式模式爲',[^,] *'。接下來,LTRIM匹配regexp_substr。 – 2014-09-03 16:43:14