การคำนวณด้วย INTERVAL
หากคุณบริหารร้านเช่า DVD จริง ๆ ย่อมมีบางครั้งที่ต้องตรวจสอบว่าลูกค้ากำลังเช่าภาพยนตร์เรื่องใดอยู่บ้าง จากแบบฝึกหัดก่อนหน้า เราพบว่าบางรายการในผลลัพธ์มีค่า NULL ใน return_date ซึ่งหมายความว่าการเช่านั้นยังไม่ได้คืน
แต่ละรายการเช่าในตาราง film มีคอลัมน์ rental_duration ที่บอกจำนวนวันสูงสุดที่ลูกค้าสามารถเช่า DVD ได้ก่อนที่จะถือว่าเกินกำหนด ในแบบฝึกหัดนี้ จะกรองรายการที่มีค่า NULL ใน return_date ออก และแปลง rental_duration ให้เป็นประเภท INTERVAL โดยสามารถใช้วิธีดังตัวอย่างนี้
SELECT INTERVAL '1' day * timestamp '2019-04-10 12:34:56'
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
ฟังก์ชันสำหรับจัดการข้อมูลใน PostgreSQL
คำแนะนำการฝึกหัด
- แปลง
rental_durationโดยคูณกับINTERVAL1 วัน - ลบ
rental_dateออกจากreturn_dateเพื่อคำนวณจำนวนdays_rented - กรองรายการเช่าที่มีค่า
NULLในreturn_dateออก
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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;