首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子字符串/从oracle中的字符串值提取

子字符串/从oracle中的字符串值提取
EN

Stack Overflow用户
提问于 2018-12-18 00:19:11
回答 4查看 75关注 0票数 0

嗨,我有下面的文字和文件名从下面的文字。但也需要日期提取。而不是硬编码,我想作为子串函数,在那里我可以从文本本身中提取日期。

代码语言:javascript
复制
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
);
EN

回答 4

Stack Overflow用户

发布于 2018-12-18 00:59:50

假设日期总是出现在第一个下划线之前( "fname“开始的地方),并且是8位数字,你可以这样做:

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-12-18 01:02:05

您可以随时使用regexp_substr()

代码语言:javascript
复制
   replace(regexp_substr(fname, '_[0-9]{8}_', 1, 1), '_', '') as date

对于文件名:

代码语言:javascript
复制
   regexp_substr(fname, '[^_]+$', 1, 1) as fname,
票数 1
EN

Stack Overflow用户

发布于 2018-12-18 00:55:31

如果你想“按原样”获取日期,那么这可能会有所帮助:

代码语言:javascript
复制
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53819111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档