Oracle Regexp_substr 字符串
Oracle Regexp_substr String
我有像 a123bcd-e2343fg-hij-dfgh
这样的字符串
我想在 oracle 中使用 Regular_expression 输出 e2343fg-hij-dfgh
。
select regexp_substr('abcd-efg-hij','-[^-]+'1) from dual;
select substr('abcd-efg-hij',
regexp_instr('abcd-efg-hij','-[^-]+')+1,length('abcd-efg-hij'))
from dual;
试试这个
您可以应用 regexp_substr
和 [^-]+[-^]
模式,然后 ltrim
作为 :
select ltrim('a123bcd-e2343fg-hij-dfgh',
regexp_substr('a123bcd-e2343fg-hij-dfgh','[^-]+[-^]')) as output_string
from dual;
或更好地调用绑定变量:
select ltrim('&str', regexp_substr('&str','[^-]+[-^]')) as output_string
from dual;
其中 &str
可以在提示后替换为 a123bcd-e2343fg-hij-dfgh
。
为什么 正则表达式 ,当一个微不足道的 SUBSTR + INSTR
可以很好地快速完成工作时?没错,它看起来 更聪明,但我看不出任何其他好处。
SQL> with test (col) as
2 (select 'a123bcd-e2343fg-hij-dfgh' from dual)
3 select substr(col, instr(col, '-') + 1) result
4 from test;
RESULT
----------------
e2343fg-hij-dfgh
SQL>
为了论证,regexp_replace
也适用。此正则表达式匹配第一个破折号之前的任何内容,并记住它 returns.
的其余部分
with tbl(str) as (
select 'a123bcd-e2343fg-hij-dfgh' from dual
)
select regexp_replace(str, '^.*?-(.*)', '')
from tbl;
请记住,如果 regexp_substr() 没有找到匹配项,它 returns NULL 但如果 regexp_replace() 没有找到匹配项,它 return原始字符串。
我有像 a123bcd-e2343fg-hij-dfgh
这样的字符串
我想在 oracle 中使用 Regular_expression 输出 e2343fg-hij-dfgh
。
select regexp_substr('abcd-efg-hij','-[^-]+'1) from dual;
select substr('abcd-efg-hij',
regexp_instr('abcd-efg-hij','-[^-]+')+1,length('abcd-efg-hij'))
from dual;
试试这个
您可以应用 regexp_substr
和 [^-]+[-^]
模式,然后 ltrim
作为 :
select ltrim('a123bcd-e2343fg-hij-dfgh',
regexp_substr('a123bcd-e2343fg-hij-dfgh','[^-]+[-^]')) as output_string
from dual;
或更好地调用绑定变量:
select ltrim('&str', regexp_substr('&str','[^-]+[-^]')) as output_string
from dual;
其中 &str
可以在提示后替换为 a123bcd-e2343fg-hij-dfgh
。
为什么 正则表达式 ,当一个微不足道的 SUBSTR + INSTR
可以很好地快速完成工作时?没错,它看起来 更聪明,但我看不出任何其他好处。
SQL> with test (col) as
2 (select 'a123bcd-e2343fg-hij-dfgh' from dual)
3 select substr(col, instr(col, '-') + 1) result
4 from test;
RESULT
----------------
e2343fg-hij-dfgh
SQL>
为了论证,regexp_replace
也适用。此正则表达式匹配第一个破折号之前的任何内容,并记住它 returns.
with tbl(str) as (
select 'a123bcd-e2343fg-hij-dfgh' from dual
)
select regexp_replace(str, '^.*?-(.*)', '')
from tbl;
请记住,如果 regexp_substr() 没有找到匹配项,它 returns NULL 但如果 regexp_replace() 没有找到匹配项,它 return原始字符串。