Дата преобразования 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)

в то время как для MySQL:

select DATE_FORMAT('2017-01-01', '%x-%v');

является

2016-52

и поэтому 2017-12-17это неделя 50

Другие вопросы по тегам