我有一個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;
我有一個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;
如果你在前面加上|||
,那麼你可以使用
((|||)([^|]*)){5}
和捕捉每一個第3組?
PLZ - 使用你的建議與我的例子,並告訴我如何從字符串拉第三個值爲null?我試過你的代碼,它不工作.. – awk
我問你如何標準'PL/SQL'正則表達式。你沒回答。我不知道'PL/SQL',但我知道正則表達式。正則表達式通常有一種叫做「捕獲組」的東西。這些組的值可以按順序提取和使用。我知道如何在'Java','Vi'和Unix電源工具中做到這一點。如果'PL/SQL'是標準的,它將有一些方法來做到這一點。 – Stewart
是的,它非常標準,經常使用。我正在使用PLSQL來完成這項任務。我用REG_EXP查找了捕獲組。但它不是我正在尋找的答案...謝謝你的時間。 – awk
這裏亞去:
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>
真棒..這是一個很好的解決方案..謝謝...謝謝你... – awk
怎樣的標準是PL/SQL正則表達式? – Stewart