Дата преобразования PostgreSQL (ГГГГ-WW) в сравнении с MySQL ('%x-%v')
Я пытаюсь преобразовать запрос из MySQL в PostgreSQL. Результаты немного различаются, так как кажется, что есть разница между тем, как эти два языка определяют неделю в году, и тем, в какие дни они включены.
Та же логика дает разные результаты даты:
Синтаксис PostgreSQL -
select date from sales where to_char(date, 'YYYY-WW') >= '2017-51' AND to_char(date, 'YYYY-WW') <= '2017-52'
Синтаксис MySQL -
select date from sales where
DATE_FORMAT(date, '%x-%v') >='2017-51' and DATE_FORMAT(date, '%x-%v') <='2017-52'
Когда я запрашиваю PostgeSQL, результаты 2017-12-17: 2017-12-24
, MySQL результаты 2017-12-18: 2017-12-25
,
Почему здесь есть разница?
1 ответ
https://www.postgresql.org/docs/10/static/functions-formatting.html
Номер недели в году (1-53) (первая неделя начинается в первый день года)
https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
% v Неделя (01..53), где понедельник - первый день недели
так что это поведение ожидается, потому что для postgres
t=# select to_char('2017-12-17'::date,'Day'), to_char('2017-12-17'::date,'WW');
to_char | to_char
-----------+---------
Sunday | 51
(1 row)
так как:
t=# select to_char('2017-01-01'::date,'Day'), to_char('2017-01-01'::date,'WW');
to_char | to_char
-----------+---------
Sunday | 01
(1 row)
select DATE_FORMAT('2017-01-01', '%x-%v');
является
2016-52
и поэтому 2017-12-17
это неделя 50