我需要在连字符之间提取字符,我尝试使用regexp_substr但是我遇到了一个问题,因为字符串不一致。
字符串可以是
111111-111103-ABCDEF--L00002
123456-111111-ABCDEF-000000-111111
111111-111103-ABCDEF-000002-
第一组是资金,
第二项活动,
第三个帐户,
第四个组织
和第五个位置
我可以将regexp_substr用于第二和第三个字符串的字符串,如下所示
select regexp_substr('123456-111111-ABCDEF-000000-111111','[^-]+',1,4) from dual;
select regexp_substr('123456-111111-ABCDEF-000000-','[^-]+',1,5) from dual;
并为正确的字段指定正确的值。
但是我遇到了字符串123456-111111-ABCDEF - 111111的问题,第四个字段应该被指定为null,但它会获取第5个值并将其分配给第4个。
select regexp_substr('123456-111111-ABCDEF--111111','[^-]+',1,4) from dual;
有没有办法照顾' - '只计算一个连字符?
谢谢!
答案 0 :(得分:1)
这假设字符串中的每个段都由' - '分隔。 所以制作' - '你好了:
select replace(regexp_substr('123456-111111-ABCDEF--111111' ,'[^-]*(-|$)',1,1), '-', '' ) from dual;
select replace(regexp_substr('123456-111111-ABCDEF--111111' ,'[^-]*(-|$)',1,4), '-', '' ) from dual;
select replace(regexp_substr('123456-111111-ABCDEF--111111' ,'[^-]*(-|$)',1,5), '-', '' ) from dual;
请参阅http://sqlfiddle.com/#!4/5a13e/10
更新:更好的解决方案,无需添加假人' - '最后