繁体   English   中英

子串/从Oracle中的字符串值中提取期望

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM