我有一個regex_substr不遵守空值的問題。Oracle REGEX_SUBSTR不遵守空值
select
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 1) AS phn_nbr,
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 2) AS phn_pos,
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 3) AS phn_typ,
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 4) AS phn_strt_dt,
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 5) AS phn_end_dt,
REGEXP_SUBSTR ('2035197553,2,S,14-JUN-14,,P', '[^,]+', 1, 6) AS pub_indctr
from dual;
如果phn_end_dt爲null並且pub_indctr不爲空,pub_indctr的值被轉移到phn_end_dt。
結果: -
PHN_NBR PHN_POS PHN_TYP PHN_STRT_DT PHN_END_DT PUB_INDCTR
---------- ------- ------- ----------- ---------- ------------
2035197553 2 S 14-JUN-14 P
雖然它應該是
PHN_NBR PHN_POS PHN_TYP PHN_STRT_DT PHN_END_DT PUB_INDCTR
---------- ------- ------- ----------- ---------- ------------
2035197553 2 S 14-JUN-14 P
有什麼建議?
感謝您指出我在正確的方向,我都用這個來解決這一問題。 SELECT REGEXP_SUBSTR(val,'([^,] *),| $',1,1,NULL,1)phn_nbr ,REGEXP_SUBSTR(val,'([^,] *),| $',1,2 ,NULL,1)phn_pos ,REGEXP_SUBSTR(val,'([^,] *),| $',1,3,NULL,1)phn_typ ,REGEXP_SUBSTR(val,'([^,] *),| | $',1,4,NULL,1)phn_strt_dt ,REGEXP_SUBSTR(val,'([^,] *),| $',1,5,NULL,1)phn_end_dt ,REGEXP_SUBSTR(val ||' ,'([^,] *),| $',1,6,NULL,1)pub_indctr FROM(SELECT'2035197553,2,S,14-JUN-14,P'val FROM dual); – Ankit 2014-08-27 14:25:34
@Ankit:你可以取消將此標記爲答案,並將解決方案作爲答案發布。由於Avinash Raj的回答是錯誤的。 – Wouter 2015-08-14 11:50:57
@Avinash Raj:您測試了哪個Oracle版本?對於字符串中的每個逗號,我得到一個NULL值,所以P值最終在第10個捕獲組中。我在第5個捕獲組中獲得了S值。使用Oracle 12c – Wouter 2015-08-14 11:53:47