Есть ли способ извлечь все даты из строки в Redshift? - PullRequest
0 голосов
/ 06 июня 2019

Можно ли посчитать (и, возможно, извлечь) для заданной строки, сколько там дат?Например, строка может выглядеть как (2019-06-01, 2019-06-02, 2019-06-03) или (This is the first date: 2019-06-01; This is the second date: 2019-06-02) или в какой-либо другой форме.В первом случае он должен возвращать 3. И во втором тексте примера он должен возвращать 2.

Я не уверен, с чего начать.Возможно ли это в Redshift / PostgreSQL?

Любое руководство будет высоко ценится.Заранее спасибо!

1 Ответ

2 голосов
/ 07 июня 2019

Это должно работать

select regexp_count(str_field, '[0-9]{4}-[0-9]{2}-[0-9]{2}') from your table

Для проверки я использовал это

with test_data as (
select '2019-06-01, 2019-06-02, 2019-06-03' str_field union all
select 'This is the first date: 2019-06-01; This is the second date: 2019-06-02'
)
select regexp_count(str_field, '[0-9]{4}-[0-9]{2}-[0-9]{2}') date_count from test_data

Результат

date_count
3
2

Для извлечения вы можете использовать следующий sql, вы можете добавить больше строк в зависимости от того, сколько у вас дат, максимум

with test_data as (select '2019-06-01, 2019-06-02, 2019-06-03' str_field union all
select 'This is the first date: 2019-06-01; This is the second date: 2019-06-02'
)
select regexp_substr(str_field, '[0-9]{4}-[0-9]{2}-[0-9]{2}',1,1) date1,
       regexp_substr(str_field, '[0-9]{4}-[0-9]{2}-[0-9]{2}',1,2) date2,
       regexp_substr(str_field, '[0-9]{4}-[0-9]{2}-[0-9]{2}',1,3) date3
  from test_data

Результат:

date1       date2       date3
2019-06-01  2019-06-02  2019-06-03
2019-06-01  2019-06-02  

...