Почему Redshift Datediff дает разные недели, когда разница в количестве дней одинакова? - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь найти количество недель между двумя днями. Когда разница составляет 8 дней, я должен получать 1 или 2 недели, в зависимости от того, как работает функция в Redshift (округление вверх или вниз). Тем не менее, он должен быть последовательным в зависимости от того, какой путь он выберет.

Я понимаю, что мог бы просто взять количество дней, а затем разделить на 7 и сделать либо КРУГЛЫЙ, либо ПОТОЛОЧНЫЙ, но я просто пытаюсь понять, почему DATEDIFF (недели, дата1, дата2) предоставляет либо 1, либо 2, когда У меня две даты разные на 8 дней.

SELECT
DATEDIFF(weeks, '2019-03-17', '2019-03-25') AS week_difference1,
DATEDIFF(days, '2019-03-17', '2019-03-25') AS day_difference1,

DATEDIFF(weeks, '2019-03-16', '2019-03-24') AS week_difference2,
DATEDIFF(days, '2019-03-16', '2019-03-24') AS day_difference2

Результат: week_difference1 = 1

day_difference1 = 8

week_difference2 = 2

day_difference2 = 8

1 Ответ

0 голосов
/ 29 марта 2019

Как и во многих программных продуктах из США, первый день недели в Redshift (по крайней мере, что касается DATEDIFF) - воскресенье , а не стандарт ISO понедельника.Поэтому при подсчете количества недель между двумя датами граница будет суббота / воскресенье.

В вашем примере восемь дней между 16 марта 2019 года и 24 марта 2019 года пересекают две недели (одна 16/17 марта).и 23-24 марта), поэтому итоговое значение DATEDIFF равно 2 (пересекли две недели).

Однако восемь дней между 17 марта и 25 марта только пересекают одну неделю (23/24)Марта) итоговое значение DATEDIFF равно 1.

...