首页 > 解决方案 > 在 oracle 中捕获子字符串

问题描述

我想搜索从以下类型的字符串中获取子字符串 -

TEST-01-2019/10/10 01:01:20

预期结果 -

TEST-01 

基本上我想提取日期连字符之前的所有内容。我怎样才能做到这一点?通过正则表达式?

标签: oraclesubstring

解决方案


尝试使用REGEXP_SUBSTR

SELECT REGEXP_SUBSTR(col, '^[^-]+-[^-]+')
FROM yourTable;

演示

这将选择TEST-01您提供的输入。逻辑是匹配的:

^          from the beginning of the string
    [^-]+  one or more non dash characters
    -      a literal dash
    [^-]+  one or more non dash characters

这对应于日期之前的部分,至少对于您碰巧向我们展示的样本而言。

另一种方法可能是正则表达式替换日期字符串,直到输入结束:

SELECT REGEXP_REPLACE(col, '-[0-9]{4}/[0-9]{2}/[0-9]{2}.*', '')
FROM yourTable;

演示

此正则表达式模式匹配破折号,后跟YYYY/MM/DD格式中的日期,然后是直到字符串末尾的所有内容。然后它用空字符串替换这个匹配,有效地将它从输入中删除。


推荐阅读