Postgres даты и извлечения номера недели - противоречивые результаты - PullRequest
0 голосов
/ 21 февраля 2019

Я проводил некоторый статистический анализ данных в базе данных Postgres (v10.6), сгруппированных по неделям ISO, и наткнулся на явное несоответствие в том, как возвращаются номера недель, например:

SELECT TO_CHAR(DATE_TRUNC('week',TIMESTAMP '2019-02-14'),'WW');

возвращает 06

, тогда как:

SELECT EXTRACT(WEEK FROM TIMESTAMP '2019-02-14');

возвращает 7

Почему существует расхождение / какой изэто правильно?Я подозреваю последнее, так как эквивалентная операция в PHP также возвращает 07 :

$dte = new DateTime('2019-02-14');
echo $dte->format('W');

Меня больше всего беспокоит то, что есть какая-то веская причина для такого различия, которое я пропускаю...

1 Ответ

0 голосов
/ 21 февраля 2019

Как указано в руководстве 'WW' возвращает

номер недели в году (1-53) ( первая неделя начинается в первый деньгод )

(выделено мной)

extract(week ...) всегда возвращает неделю ISO .Если вы хотите, чтобы to_char() также возвращал неделю ISO, вам нужно использовать 'IW'.Если вы также хотите отобразить год с to_char(), вы должны использовать 'IYYY' вместо 'YYYY', что эквивалентно extract(isoyear ...)

...