Подстрока / выдержка ожидается из строкового значения в Oracle - PullRequest
0 голосов
/ 17 декабря 2018

Привет у меня есть текст ниже и принимая имя файла из текста ниже.но нужно также извлечь дату.но вместо жесткого кода я хочу использовать функцию подстроки, где я могу извлечь дату из самого текста.

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
);

Ответы [ 4 ]

0 голосов
/ 17 декабря 2018

Вы всегда можете использовать regexp_substr():

   replace(regexp_substr(fname, '_[0-9]{8}_', 1, 1), '_', '') as date

И для имени файла:

   regexp_substr(fname, '[^_]+$', 1, 1) as fname,
0 голосов
/ 17 декабря 2018

Предполагая, что дата всегда происходит перед первым подчеркиванием (где начинается ваше "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
0 голосов
/ 17 декабря 2018

это будет работать:

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
);
0 голосов
/ 17 декабря 2018

Если вы хотите получить дату "как есть", то это может помочь:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...