如何提取文件名的一部分?

时间:2019-06-13 17:01:42

标签: sql regex oracle

我有一个文件名 415-11-CV-21654-CBB-20190228-0-transactions.csv。 我想从上面的名称中获得11-CV-21654-CBB。如何在SQL查询中使用正则表达式

2 个答案:

答案 0 :(得分:0)

一个选项是

with t(str) as
(
  select '415-11-CV-21654-CBB-20190228-0-transactions.csv' from dual
)
select substr(str,1,instr(str,to_char(sysdate,'-yyyy')) - 1  )
   as "Result String"
  from t;

Result String
-------------------
415-11-CV-21654-CBB

或另一个:

with t(str,year) as
(
  select '415-11-CV-21654-CBB-20190228-0-transactions.csv', to_char(sysdate,'yyyy') 
    from dual
)
select rtrim(regexp_substr(str,'(*.)+'||year),'-'||year)
   as "Result String"
  from t

Result String
-------------------
415-11-CV-21654-CBB

提取带有连字符前缀的当前年份部分。

答案 1 :(得分:0)

这是使用regexp_replace()的一种方法:

select regexp_replace(fname, '^[^-]+-([^-]+-[^-]+-[^-]+-[^-]+).*$', '\1')
from (select '415-11-CV-21654-CBB-20190228-0-transactions.csv' as fname from dual) x