Выражение регулярного выражения, где оно может извлечь число, расположенное в конце строки в строке - PullRequest
0 голосов
/ 17 марта 2020

https://dbfiddle.uk/?rdbms=oracle_18&fiddle=94771b6589b01526ad0cf6e5c4d01945

Мне нужна помощь в извлечении числовой подстроки из имени файла
в настоящее время для формата файла - 'monkey_eats_mango_everyday_202002.txt' мы делаем вот так

select regexp_substr('monkey_eats_mango_everyday_202002.txt', '\d+') as parameter12a 
from dual;

result-

202002

, который, в свою очередь, использовал в большем запросе, чтобы получить последнюю дату этой даты, такую ​​как

select to_char(last_day(to_date(regexp_substr('monkey_eats_mango_everyday_202002.txt', '\d+'),  'yyyymm')), 'yyyymmdd') as parameter 
from dual ;

result-

20200229

Теперь формат файла изменился, поэтому у нас есть - 'donkey_eats_pines_cones_20192301_7771234_everyday_202002.txt'

В этом формате файла в других местах, например 201943_7771234, есть числа, которые могут быть датами или любым случайным числом, поэтому мне нужно выражение регулярного выражения, которое можно извлечь 202002 из файла формата

select regexp_substr('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '\d+') as parameter12a 
from dual;

Ответы [ 3 ]

4 голосов
/ 17 марта 2020

Вы можете использовать \., чтобы привязать соответствие цифр к периоду рядом с точкой в ​​имени файла, а затем использовать группу захвата вокруг цифр, чтобы получить только цифры в выводе, используя 6-й параметр для * 1002. *REGEXP_SUBSTR, чтобы указать, что вы хотите, чтобы в выводе была только группа 1:

SELECT REGEXP_SUBSTR('donkey_eats_pines_cones_201943_7771234_everyday_202002.txt', '(\d+)\.', 1, 1, NULL, 1) AS parameter12a 
FROM dual;

Вывод:

202002

Демонстрация на dbfiddle

0 голосов
/ 17 марта 2020

отметьте это

select reverse(split_part(reverse(r.r ), '.', 2)) from 
(
SELECT reverse(split_part(reverse('donkey_eats_pines_cones_20192301_7771234_everyday_202002.txt'), '_', 1)) as r
)as r

ANS: 202002

0 голосов
/ 17 марта 2020

Одним из вариантов является использование вложенных выражений: inner возвращает расширение файла и дату (предшествующую этому расширению), а внешняя выборка сама дата.

SQL> with test (col) as
  2    (select 'donkey_eats_pines_cones_201943_7771234_everyday_202002.txt' from dual)
  3  select regexp_substr(regexp_substr(col, '\d+.\w+$'), '\d+') result From test
  4  /

RESULT
------
202002

SQL>
...