Ответ 1
Вы хотите использовать interval
и current_date
:
select * from books where returned_date > current_date - interval '7 days'
Это приведет к возврату данных с прошлой недели , включая.
Здесь больше о работе с датами в Postgres.
У меня есть таблица books
с столбцом returned_date
. Я бы хотел увидеть результаты для всех книг с возвращенной датой, которая произошла на прошлой неделе.
Любые мысли? Я пробовал делать математику по дате, но Postgres не был доволен моей попыткой.
Вы хотите использовать interval
и current_date
:
select * from books where returned_date > current_date - interval '7 days'
Это приведет к возврату данных с прошлой недели , включая.
Здесь больше о работе с датами в Postgres.
Упрощение и правильность:
SELECT * FROM books WHERE returned_date > now()::date - 7
now()::date
- это реализация Postgres стандартного SQL CURRENT_DATE
. Оба делают то же самое в PostgreSQL. Просто демонстрируя.
now()::date - 7
работает, потому что можно вычесть/добавить integer
значения (= дни) из/в date
. Некорректное число, например 7
, является числовым литералом, по умолчанию равным integer
, в то время как в нем содержатся только цифры и необязательный главный знак, поэтому явное приведение не требуется.
Вы можете работать с interval
, но это проще и быстрее для date
. С тип данных timestamp
вам нужно будет добавить/вычесть interval
, например, демонстрирует @Eric.
Вычисление не зависит от фактического типа данных returned_date
, полученный тип справа от оператора будет принудительно согласован в любом случае (и поднимите ошибку, если не зарегистрирован листинг).
Для прошедшей недели:
Чтобы включить сегодня, сделайте его > current_date - 7
или >= current_date - 6
.
Чтобы исключить сегодня, сделайте его BETWEEN current_date - 7 AND current_date - 1
(или аналогичным). >= current_date - 7
, поскольку другие ответы предлагают вернуть строки для последних 8 дней вместо 7 и, строго говоря, неправильно.
Какую математику вы пробовали?
Это должно работать
select * from books where current_date - integer '7'