[英]substring / extract expected from string value in oracle
嗨,我有下面的文字,并从下面的文字中取文件名。 但还需要提取日期。 但我希望将其从文本本身提取日期作为子字符串函数,而不是硬编码。
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
);
假设该日期始终出现在第一个下划线(“ 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
您可以随时使用regexp_substr()
:
replace(regexp_substr(fname, '_[0-9]{8}_', 1, 1), '_', '') as date
对于文件名:
regexp_substr(fname, '[^_]+$', 1, 1) as fname,
如果您想按“原样”获取日期,那么这可能会有所帮助:
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>
这将工作:
select
SUBSTR(fname, INSTR(fname, '/',1,3)+1),
instr(fname,'_')-INSTR(fname, '/',1,3)+1)) as fname,
to_date(substr(fname,instr(fname,'_',1)+1,8),YYYYMMDD) as fdate
from
(
select '/home/dir/file_name_20181217_product.csv' as fname from dual
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.