Sql Orcle:Regexp_substr

时间:2016-08-02 10:57:52

标签: sql oracle substr regexp-substr

我有以下表达式:  我的一个专栏中的15-JUL-16,20-JUL-16,20-JUL-16,30-JUL-16

我成功地使用SUBSTR(REGEXP_SUBSTR(base.systemdate, '.+,'), 1, 9)从表达式中获取15-JUL-16(表达式直到第一个逗号)。

但是我不知道如何获得30-JUL-16(最后一个逗号后面的最后一个表达式)。

有没有办法使用REGEXP_SUBSTR来获得它?因为我们在这。

是否有一种简洁的方法只使用REGEXP_SUBSTR来获取15-JUL-16而不使用逗号?因为我使用第二个SUBSTR来删除逗号,所以我可以使它与数据格式兼容。

2 个答案:

答案 0 :(得分:0)

您可以使用非常相似的构造:

SELECT REGEXP_SUBSTR(base.systemdate, '[^,]+$')

Oracle(以及一般的正则表达式)是“贪婪的”。这意味着他们需要最长的字符串。如果您知道列表中的项目长度相同,则可以使用:

SELECT SUBSTR( ase.systemdate, -9)

答案 1 :(得分:0)

试试这个

    select dates from
    (
        SELECT dates,max(id) over (partition by null) lastrec,min(id) over (partition by null) firstrec,id FROM (
            with mine as(select '15-JUL-16,20-JUL-16,20-JUL-16,30-JUL-16' hello from dual)
               select rownum id,regexp_substr(hello, '[^,]+', 1, level) dates from mine
               connect by regexp_substr(hello, '[^,]+', 1, level) is not null)
     )
     where id=firstrec or id=lastrec

此查询为您提供逗号分隔列表中的第一个和最后一个记录。