Oracle regexp - 将字符串重新格式化为类似日期的信息

时间:2016-03-21 19:16:18

标签: oracle regexp-replace

列包含特殊类型文件的名称,其名称如下:“ kontrolrapport-2015.12.23-10.19.05.pdf ”。我想提取日期,即“ 2015-12-23 10:19 ”。 我认为这将是和平的蛋糕,但它需要更多,比我能够弄清楚 这是我得到多远 select 'kontrolrapport-2015.12.23-10.19.05.pdf' as file_name, regexp_replace('kontrolrapport-2015.12.23-10.19.05.pdf','(\w*)-', '') as date_like from dual;

3 个答案:

答案 0 :(得分:1)

如果格式是可预测的,您可以这样做:

select to_date(substr('kontrolrapport-2015.12.23-10.19.05.pdf', 16,19), 'YYYY.MM.DD-HH.MI.SS') from dual;

甚至

select to_date(replace(replace('kontrolrapport-2015.12.23-10.19.05.pdf', 'kontrolrapport-',''),'.pdf','') , 'YYYY.MM.DD-HH.MI.SS') from dual;

如果您希望将其作为问题中指示的字符串,那么如何在to_char中包含上述任一项,例如:

select to_char(to_date(substr('kontrolrapport-2015.12.23-10.19.05.pdf', 16,19), 'YYYY.MM.DD-HH.MI.SS'), 'YYYY-MM-DD HH:MI')

答案 1 :(得分:1)

根据您的示例正则表达式,我假设您的文件名中有一个变量前缀,后跟一个连字符,后跟日期,后跟时间,然后是文件扩展名。

以下是我用来提取每条信息的正则表达式 -

with f as (SELECT 'kontrolrapport-2015.12.23-10.19.05.pdf' AS file_name,
       '([^-]+)-([0-9\.]+)-([0-9\.]+)\.([a-z]+)' AS regex
  FROM DUAL)
select  f.file_name, 
        regexp_substr (f.file_name, f.regex, 1, 1, 'i', 1) as prefix_part,
        regexp_substr (f.file_name, f.regex, 1, 1, 'i', 2) as date_part,
        regexp_substr (f.file_name, f.regex, 1, 1, 'i', 3) as time_part,
        regexp_substr (f.file_name, f.regex, 1, 1, 'i', 4) as file_extension
 from f;

从这开始,可能会进一步改进。我将[a-z][0-9]替换为POSIX类。

答案 2 :(得分:0)

为什么你不使用substr和to_date函数它更容易

To_date(Substr(filename,13,15),' yyyy.mm.dd-hh24.mi')

会返回日期