Sql 甲骨文:Regexp_substr
Sql Oracle: 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 来去掉逗号,所以我可以让它与数据格式兼容。
您可以使用非常相似的结构:
SELECT REGEXP_SUBSTR(base.systemdate, '[^,]+$')
Oracle(和一般的正则表达式)是 "greedy"。这意味着他们使用最长的字符串。如果你知道列表中的项目都是相同的长度,你可以只使用:
SELECT SUBSTR( ase.systemdate, -9)
试试这个
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
此查询为您提供逗号分隔列表中的第一条和最后一条记录。
我有以下表达:
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 来去掉逗号,所以我可以让它与数据格式兼容。
您可以使用非常相似的结构:
SELECT REGEXP_SUBSTR(base.systemdate, '[^,]+$')
Oracle(和一般的正则表达式)是 "greedy"。这意味着他们使用最长的字符串。如果你知道列表中的项目都是相同的长度,你可以只使用:
SELECT SUBSTR( ase.systemdate, -9)
试试这个
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
此查询为您提供逗号分隔列表中的第一条和最后一条记录。