Реплицируйте Oracle 'TRUN C (DATE,' WW ') `поведение в PostgreSQL - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно преобразовать это в postgres:

TRUNC(CAST((SYSTIMESTAMP AT TIME ZONE 'US/Eastern') AS DATE), 'WW') 

Это вернет 22-APR-20

Я попытался

(DATE_TRUNC('WEEK', CAST((CURRENT_TIMESTAMP AT TIME ZONE 'US/Eastern') AS DATE)) - interval '1 week')

, но вернулось 20 апреля.

1 Ответ

1 голос
/ 27 апреля 2020
user=# select date_trunc('year', now())::date + (to_char(now(), 'WW')::int - 1) * 7;
  ?column?  
------------
 2020-04-22
(1 row)

Как это работает

  • date_trunc('year', now())::date возвращает первый день года
  • to_char(now(), 'WW')::int - 1 номер текущей недели (начиная с нуля)
  • первый день года + текущая неделя * 7 дней = ближайшая предыдущая дата с тем же днем ​​недели, что и первый день года.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...