Plsql 如何解析空值?
我有一个管道分隔文件(3个管道),它也有空值。如何从本例中提取包含空值的数据Plsql 如何解析空值?,plsql,Plsql,我有一个管道分隔文件(3个管道),它也有空值。如何从本例中提取包含空值的数据 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} 并捕
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}
并捕获每第三组?给你:
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>
SQL>以tbl(str)作为(
2从双通道中选择“Abc | | | | | KXG | | | | | | | CCC | | | 5/12/2014 12 12:12:22,DDD,EEE,FFF”
3 )
4选择列\u值字段\u nbr、REGEXP\u SUBSTR(str,(.*)(\\\\\\\\\\\\\\\\\\\\\\\\\\$)',1,列\u值,NULL,1)作为匹配值
5来自tbl,
6表(
7投(
8多集(
9选择级别
双程10分
11按级别连接
PL/SQL regex有多标准?请在我的示例中使用您的建议,告诉我如何从字符串中提取第三个空值?我尝试了您的代码,但它不起作用。我问您标准的PL/SQL
regex有多标准。您没有回答。我不知道PL/SQL
,但我知道regex.regex通常都有一些g称为“捕获组”这些组的值可以按顺序提取和使用。我知道如何在Java
、Vi
和Unix power tools中这样做。如果PL/SQL
是标准的,它将有一些方法来实现。是的,它非常标准,并且经常使用。我正在使用PLSQL完成此任务。我用REG_EXP查找捕获组。但是这不是我想要的答案…谢谢你抽出时间。