2015-11-04 45 views
0

我有一個PIPE分隔文件(3管道),它也有空值。如何從這個例子中提取包含NULL值的數據?如何解析NULL值?

with data as 

(select 'Abc|||KXG||||||CCC|||5/12/2014 12:12:22,DDD,EEE,FFF' str from dual) 

select REGEXP_SUBSTR (str, '([^|||]*)||| |$', 1, 3, NULL, 1) from data; 
+0

怎樣的標準是PL/SQL正則表達式? – Stewart

回答

0

如果你在前面加上|||,那麼你可以使用

((|||)([^|]*)){5} 

和捕捉每一個第3組?

+0

PLZ - 使用你的建議與我的例子,並告訴我如何從字符串拉第三個值爲null?我試過你的代碼,它不工作.. – awk

+0

我問你如何標準'PL/SQL'正則表達式。你沒回答。我不知道'PL/SQL',但我知道正則表達式。正則表達式通常有一種叫做「捕獲組」的東西。這些組的值可以按順序提取和使用。我知道如何在'Java','Vi'和Unix電源工具中做到這一點。如果'PL/SQL'是標準的,它將有一些方法來做到這一點。 – Stewart

+1

是的,它非常標準,經常使用。我正在使用PLSQL來完成這項任務。我用REG_EXP查找了捕獲組。但它不是我正在尋找的答案...謝謝你的時間。 – awk

0

這裏亞去:

SQL> with tbl(str) as (
    2 select 'Abc|||KXG||||||CCC|||5/12/2014 12:12:22,DDD,EEE,FFF' from dual 
    3 ) 
    4 select COLUMN_VALUE field_nbr, REGEXP_SUBSTR(str ,'(.*?)(\|\|\||$)', 1, COLUMN_VALUE, NULL, 1) AS match_value 
    5  FROM tbl, 
    6    TABLE(
    7     CAST(
    8     MULTISET(
    9      SELECT LEVEL 
10      FROM DUAL 
11      CONNECT BY LEVEL <= REGEXP_COUNT(str ,'\|\|\|')+1 
12     ) AS SYS.ODCINUMBERLIST 
13    ) 
14    ); 

FIELD_NBR MATCH_VALUE 
---------- --------------------------------------------------- 
     1 Abc 
     2 KXG 
     3 
     4 CCC 
     5 5/12/2014 12:12:22,DDD,EEE,FFF 

SQL> 
+0

真棒..這是一個很好的解決方案..謝謝...謝謝你... – awk