regexp_substr skips over empty positions(regexp_substr 跳过空位置)
问题描述
使用此代码返回管道分隔字符串中的第 n 个值...
With this code to return the nth value in a pipe delimited string...
regexp_substr(int_record.interfaceline, '[^|]+', 1, i)
当所有值都存在时它工作正常
it works fine when all values are present
Mike|Male|Yes|20000|Yes 所以 3rd 值为 Yes(正确)
Mike|Male|Yes|20000|Yes so the 3rd value is Yes (correct)
但是如果字符串是
Mike|Male||20000|Yes,第三个值是20000(不是我想要的)
Mike|Male||20000|Yes, the 3rd value is 20000 (not what I want)
如何告诉表达式不要跳过空值?
How can I tell the expression to not skip over the empty values?
TIA
迈克
推荐答案
好的.这应该是最适合您的解决方案.
OK. This should be the best solution for you.
SELECT
REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'^([^|]*|){2}([^|]*).*$',
'2' )
TEXT
FROM
DUAL;
所以对于你的问题
SELECT
REGEXP_REPLACE ( INCOMINGSTREAMOFSTRINGS,
'^([^|]*|){N-1}([^|]*).*$',
'2' )
TEXT
FROM
DUAL;
--INCOMINGSTREAMOFSTRINGS 是带分隔符的完整字符串
--INCOMINGSTREAMOFSTRINGS is your complete string with delimiter
--你应该通过n-1来获得第n个位置
--You should pass n-1 to obtain nth position
替代 2:
WITH T AS (SELECT 'Mike|Male||20000|Yes' X FROM DUAL)
SELECT
X,
REGEXP_REPLACE ( X,
'^([^|]*).*$',
'1' )
Y1,
REGEXP_REPLACE ( X,
'^[^|]*|([^|]*).*$',
'1' )
Y2,
REGEXP_REPLACE ( X,
'^([^|]*|){2}([^|]*).*$',
'2' )
Y3,
REGEXP_REPLACE ( X,
'^([^|]*|){3}([^|]*).*$',
'2' )
Y4,
REGEXP_REPLACE ( X,
'^([^|]*|){4}([^|]*).*$',
'2' )
Y5
FROM
T;
替代 3:
SELECT
REGEXP_SUBSTR ( REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'|',
';' ),
'(^|;)([^;]*)',
1,
1,
NULL,
2 )
AS FIRST,
REGEXP_SUBSTR ( REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'|',
';' ),
'(^|;)([^;]*)',
1,
2,
NULL,
2 )
AS SECOND,
REGEXP_SUBSTR ( REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'|',
';' ),
'(^|;)([^;]*)',
1,
3,
NULL,
2 )
AS THIRD,
REGEXP_SUBSTR ( REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'|',
';' ),
'(^|;)([^;]*)',
1,
4,
NULL,
2 )
AS FOURTH,
REGEXP_SUBSTR ( REGEXP_REPLACE ( 'Mike|Male||20000|Yes',
'|',
';' ),
'(^|;)([^;]*)',
1,
5,
NULL,
2 )
AS FIFTH
FROM
DUAL;
这篇关于regexp_substr 跳过空位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:regexp_substr 跳过空位置
基础教程推荐
- oracle区分大小写的原因? 2021-01-01
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- 在多列上分布任意行 2021-01-01
