如何在此查询中获取过期的天数?

时间:2014-10-26 23:01:10

标签: mysql datediff

我正在尝试获取客户,电影及其租借逾期天数的清单(如果租金保留的时间超过租期)。

出于某种原因,我使用此查询获得的租借天数为NULL。

我从这个资源中得到了表格:

http://dev.mysql.com/doc/sakila/en/sakila-structure-tables.html

这是我的问题:

SELECT first_name, last_name, title, DATEDIFF(DATEDIFF(return_date,rental_date), rental_duration)
FROM sakila_customer 
JOIN sakila_rental USING (customer_id) 
JOIN sakila_inventory USING (inventory_id) 
JOIN sakila_film USING (film_id) 
WHERE sakila_film.rental_duration < DATEDIFF(sakila_rental.return_date,sakila_rental.rental_date);

2 个答案:

答案 0 :(得分:1)

它返回null的原因是因为您在注释日期的值上使用DATEDIFF

请看这一行:

DATEDIFF(DATEDIFF(return_date, rental_date), rental_duration) 

执行内部(返回和租赁日期之间的差异)时,您将获得一个整数。 rental_duration也是一个整数,所以当你试图在它们之间做一个约会时你会得到null,因为你没有考虑日期的差异。

所以你应该做的是获得退货和租赁日期的日期,然后从中减去租赁期限。该号码将为您提供逾期的日期数。

试试这个:

SELECT first_name, last_name, title, (DATEDIFF(return_date, rental_date) - rental_duration) AS daysOverdue
FROM customer
JOIN rental USING (customer_id)
JOIN inventory USING (inventory_id)
JOIN film USING (film_id)
WHERE rental_duration < DATEDIFF(return_date, rental_date);

我从您的链接下载了数据库,并在MySQL工作台中运行了该数据库,并实现了以下结果集: enter image description here

答案 1 :(得分:0)

如果用于计算结果的任何值都为null,则会得到null。

另外,你的表情看起来并不正确,请尝试:

Select ...
datediff(return_date, rental_date) - rental_duration overdue
from ...
...
where datediff(return_date, rental_date) - rental_duration > 0