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 跳过空位置
基础教程推荐
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 无法解决整理冲突 2021-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
