2

我正在尝试仅根据安装和删除日期来跟踪库存,并报告在任何给定日期安装的内容。仍在安装的记录没有删除日期。所以我试图将删除日期设置为Date(now()). 但是当我在之间添加时install_dateremoval_date它只会找到两个日期的记录。

我有一个包含 的库存表nameinstall_date并且removal_date我有一个master_date包含从 2012-01-01 到 2014-12-31 的所有日期的表

Select inventory.name, 
       inventory.install_date, 
       IFNULL(inventory.removal_date,DATE(NOW())), 
       master_date.date 
FROM inventory, master_date 
WHERE master_date.date BETWEEN inventory.install_date 
                       AND inventory.removal_date

如果我删除 between 子句,它会设置removal_date为 NOW,但会继续包含removal_dateNOW 之前的记录。使用 where 子句,它只返回removal_date不为空但日期字段正确的记录。

如何使用 NOW 代替 NULLremoval_date并返回正确的记录?

4

2 回答 2

1

您可以使用 COALESCE() 来返回提供的参数中的第一个非空值。

你可以做:

BETWEEN inventory.install_date AND COALESCE(inventory.removal_date, DATE(NOW())

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

于 2013-08-21T22:39:31.850 回答
0

如果我正确理解您的问题,请说:

Select IFNULL(inventory.removal_date,DATE(NOW()))

您正在返回一个新字段。

尝试:

Select inventory.name, 
       inventory.install_date, 
       IFNULL(inventory.removal_date,DATE(NOW())), 
       master_date.date 
FROM inventory, master_date 
WHERE master_date.date BETWEEN inventory.install_date 
                       AND IFNULL(inventory.removal_date,DATE(NOW()))
于 2013-08-21T22:41:05.310 回答