Подтвердить что ты не робот

Как вы находите результаты, которые произошли на прошлой неделе?

У меня есть таблица books с столбцом returned_date. Я бы хотел увидеть результаты для всех книг с возвращенной датой, которая произошла на прошлой неделе.

Любые мысли? Я пробовал делать математику по дате, но Postgres не был доволен моей попыткой.

4b9b3361

Ответ 1

Вы хотите использовать interval и current_date:

select * from books where returned_date > current_date - interval '7 days'

Это приведет к возврату данных с прошлой недели , включая.

Здесь больше о работе с датами в Postgres.

Ответ 2

Упрощение и правильность:

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 и, строго говоря, неправильно.