Redshift Time Сравнить - PullRequest
       2

Redshift Time Сравнить

0 голосов
/ 24 января 2020

Я пытаюсь выбрать только данные по трафику c в утренние и дневные пики. При запросе данных между временами (как в трафик c час пик) в Amazon Redshift я не мог заставить sql:

    TO_TIMESTAMP(TO_CHAR(timestamp_field,'HH24:MI'),'HH21:MI')) between '0001-01-01 06:30' and '0001-01-01 09:30

работать. Это ничего не вернуло. Вместо этого мне пришлось использовать:

EXTRACT(HOUR from timestamp_field) = 6 and EXTRACT(MINUTE from timestamp_field) between 30 and 59
OR EXTRACT(HOUR from timestamp_field) between 7 and 8
OR EXTRACT(HOUR from timestamp_field) = 9 and EXTRACT(MINUTE from timestamp_field) between 0 and 30

Неужели должен быть более простой способ?

Пример ввода:

collection_start_time
---------------------
  2015-10-30 00:00:00
  2015-10-30 00:15:00
  2015-10-30 00:30:00
  2015-10-30 00:45:00
  2015-10-30 01:00:00
  2015-10-30 01:15:00
  2015-10-30 01:30:00
  2015-10-30 01:45:00
  2015-10-30 02:00:00
  2015-10-30 02:15:00

1 Ответ

0 голосов
/ 24 января 2020

Для сравнения вы должны сделать это с правильными типами данных. В первом примере вы сравниваете метку времени со строкой. Для корректной работы вы должны преобразовать строки в метку времени так же, как вы создаете метку времени:

TO_TIMESTAMP(to_char(timestamp_field, 'HH24:MI'), 'HH24:MI') between to_timestamp('06:30', 'HH24:MI') and to_timestamp('09:30', 'HH24:MI')

Или, что еще проще, просто конвертировать ее в строки и сравнивать как строки. Это будет работать до тех пор, пока ваш диапазон не пересекает другой день:

to_char(created_at, 'HH24:MI') between '06:30' and '09:30'
...