Арифметика с INTERVAL
Если бы вы управляли настоящим магазином проката DVD, вам периодически нужно было бы определять, какие фильмы сейчас находятся у клиентов на руках. В предыдущем упражнении мы видели, что в некоторых записях значение return_date равно NULL — это означает, что аренда ещё не завершена.
Каждая запись об аренде в таблице film содержит столбец rental_duration, который указывает количество дней, в течение которых клиент может держать DVD, прежде чем аренда считается просроченной. В этом упражнении вы исключите фильмы со значением NULL в столбце return_date, а также преобразуете rental_duration в тип INTERVAL. Вот один из способов выполнить такое преобразование:
SELECT INTERVAL '1' day * timestamp '2019-04-10 12:34:56'
Это упражнение является частью курса
Функции для работы с данными в PostgreSQL
Инструкции к упражнению
- Преобразуйте
rental_duration, умножив его наINTERVALв 1 день. - Вычтите
rental_dateизreturn_date, чтобы получить количество дней арендыdays_rented. - Исключите записи, в которых
return_dateимеет значениеNULL.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
SELECT
f.title,
-- Convert the rental_duration to an interval
___ '1' ___ * ___.___,
-- Calculate the days rented as we did previously
r.return_date - ___.___ AS days_rented
FROM film AS f
INNER JOIN inventory AS i ON f.film_id = i.film_id
INNER JOIN rental AS r ON i.inventory_id = r.inventory_id
-- Filter the query to exclude outstanding rentals
WHERE r.return_date ___ ___ ___
ORDER BY f.title;