我正在尝试仅根据安装和删除日期跟踪库存,并报告在任何给定日期安装的内容。仍然安装的记录没有删除日期。所以我想将删除日期设置为Date(now())
。但是当我在install_date
和removal_date
之间添加时,它只会查找包含两个日期的记录。
我有一个库存表,其中包含name
,install_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_date
在NOW之前的记录。使用where子句,它只返回removal_date
不为空但日期字段正确的记录。
如何使用NOW代替NULL removal_date
并返回正确的记录?
答案 0 :(得分: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
答案 1 :(得分: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()))