0

列には、「 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;

4

3 に答える 3

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]and[0-9]を POSIX クラスに置き換えます。

于 2016-03-21T20:18:23.040 に答える
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')
于 2016-03-21T19:34:44.537 に答える