Sql 提取连字符或破折号之间的字符
我需要提取连字符之间的字符,我尝试使用regexp_substr,但我遇到了一个问题,因为字符串不一致 字符串可以是Sql 提取连字符或破折号之间的字符,sql,oracle,regexp-substr,Sql,Oracle,Regexp Substr,我需要提取连字符之间的字符,我尝试使用regexp_substr,但我遇到了一个问题,因为字符串不一致 字符串可以是 111111-111103-ABCDEF--L00002 123456-111111-ABCDEF-000000-111111 111111-111103-ABCDEF-000002- 第一套是资金,, 第二项活动, 第三帐户, 第四组织 和第五个位置 我可以使用regexp_substr作为第二个和第三个字符串的字符串,如下所示 select 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,但是它会选择第五个值并赋值给第四个
select regexp_substr('123456-111111-ABCDEF--111111','[^-]+',1,4) from dual;
有没有办法处理'-'并只计算一个连字符
谢谢 这假定字符串中的每个段都由“-”分隔。 因此,让“乌尔阿乔”成为:
从dual中选择replace(regexp_substr('123456-111111-ABCDEF--111111','[^-]*(-124;$),1,1),'-','';
从dual中选择replace(regexp_substr('123456-111111-ABCDEF--111111','[^-]*(-124;$)',1,4),'-','';
从dual中选择replace(regexp_substr('123456-111111-ABCDEF--111111','[^-]*(-124;$)',1,5),'-','';
看
更新:更好的解决方案,不需要在末尾添加一个伪“-”非常感谢!我错过了那个解决方案。然而,这个解决方案对|很有效,当我用-,替换|时,它会给我一个空白,但是我修改了我的字符串以使其工作。非常感谢你重新引导我!!如果字符串包含空元素,则用于解析分隔字符串的格式为“
”[^-]+'
的正则表达式将失败,应避免使用。有关更多信息,请参阅本文:。i、 e.对于位置:从dual中选择regexp_substr('123456-111111-ABCDEF--11111 2','(.*?(-|$)',1,5,NULL,1)位置代码>。太糟糕了,问题结束了。非常感谢!请检查我的答案是否正确