Функции даты в снежинке работают не так, как ожидалось

Я не могу понять почему

SELECT YEAROFWEEK('2017-01-01T00:00:00.000+00:00'::timestamp) возвращает "2016"

SELECT WEEK('2017-01-01T00:00:00.000+00:00'::timestamp) возвращает "52"

Может кто-нибудь помочь мне понять?


person Baaju    schedule 17.11.2019    source источник


Ответы (2)


Вот документ для политики недели года, которая определяет, как это работает: https://docs.snowflake.net/manuals/sql-reference/parameters.html#week-of-year-policy

Пример может помочь. week_of_year_policy по умолчанию имеет значение 0 для вновь созданных учетных записей.


select YEAROFWEEK('2017-01-01T00:00:00.000+00:00'::timestamp) as yow
     , WEEK('2017-01-01T00:00:00.000+00:00'::timestamp) as w;

+------+----+
|  YOW |  W |
+------+----+
| 2016 | 52 |
+------+----+

alter session set week_of_year_policy = 1;

select YEAROFWEEK('2017-01-01T00:00:00.000+00:00'::timestamp) as yow
     , WEEK('2017-01-01T00:00:00.000+00:00'::timestamp) as w;

+------+---+
|  YOW | W |
+------+---+
| 2017 | 1 |
+------+---+
person Clivado    schedule 17.11.2019
comment
Ваш ответ, кажется, показывает OP, как получить то, что ему нужно, но, возможно, я мог бы быть более полезным, если бы вы могли объяснить, почему. Например. что такое week_of_year_policy? Или ссылку на документы. - person MSurrow; 18.11.2019
comment
OP уже связывался с документами в своем обновлении, поэтому я не дублировал, но ценю, что это был бы более полный ответ. - person Clivado; 19.11.2019

Немного покопавшись, я получил свой ответ от https://docs.snowflake.net/manuals/sql-reference/parameters.html#week-of-year-policy

person Baaju    schedule 17.11.2019
comment
и хотели бы вы объяснить для себя / других, какие параметры используются, в противном случае этот вопрос и ответы не имеют большого значения. - person Simeon Pilgrim; 17.11.2019