嗨,我有下面的文字和文件名从下面的文字。但也需要日期提取。而不是硬编码,我想作为子串函数,在那里我可以从文本本身中提取日期。
select
SUBSTR(fname, INSTR(fname, '_', -1)+1) as fname,
'20181217' as fdate
from
(
select '/home/dir/file_name_20181217_product.csv' as fname from dual
);发布于 2018-12-18 00:59:50
假设日期总是出现在第一个下划线之前( "fname“开始的地方),并且是8位数字,你可以这样做:
select
SUBSTR(fname, INSTR(fname, '_', -1)+1) as fname,
SUBSTR(fname, INSTR(fname, '_', -1)-8,8) as fdate
from
(
select '/home/dir/file_name_20181217_product.csv' as fname from dual
);
FNAME fdate
----------- --------
product.csv 20181217发布于 2018-12-18 01:02:05
您可以随时使用regexp_substr()
replace(regexp_substr(fname, '_[0-9]{8}_', 1, 1), '_', '') as date对于文件名:
regexp_substr(fname, '[^_]+$', 1, 1) as fname,发布于 2018-12-18 00:55:31
如果你想“按原样”获取日期,那么这可能会有所帮助:
SQL> select
2 SUBSTR(fname, INSTR(fname, '_', -1)+1) as fname,
3 regexp_substr(fname, '\d+') as fdate --> this
4 from (select '/home/dir/file_name_20181217_product.csv' as fname from dual);
FNAME FDATE
----------- --------
product.csv 20181217
SQL>https://stackoverflow.com/questions/53819111
复制相似问题