Получить временную метку дня недели - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь найти временную метку определенного дня недели с помощью postgrSQL. Например, можно использовать now () для получения текущего времени, но я хочу получить данные того же типа, например, для самого последнего понедельника или воскресенья.

Я ищу это, потому что у меня есть запрос, который извлекает данные между настоящим моментом и несколькими месяцами назад, и я не хочу включать текущую неделю. Как пример того, что он делает сейчас:

creation_date > now() - INTERVAL '2 month'

Я думал, что это может достичь моих целей:

BETWEEN now() - INTERVAL '4 month' AND now() - INTERVAL '1 week'

Но он только вычитает 7 дней из запроса, а это не то, что я хочу. В основном, я хочу:

BETWEEN now() - INTERVAL '4 month' AND ????

Там, где вопросительные знаки являются метками времени для самого последнего воскресенья, по крайней мере, я считаю, что это сработает.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

date_trunc('week', current_date) - interval '1' day

date_trunc('week', current_date) вернет дату в начале недели.

Начало недели всегда в понедельник в Postgres.Вот почему вам нужно вычесть еще один день из результата, чтобы получить воскресенье.

1 голос
/ 16 марта 2011

Вы можете извлечь текущий день недели (0-6, воскресенье - 0), используя EXTRACT(DOW FROM date). Затем вы можете использовать это, чтобы создать интервал для сложения или вычитания, чтобы достичь определенного дня недели. Например, самое последнее воскресенье будет now() - (EXTRACT(DOW FROM now()) || ' days')::interval.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...