Mysql查询问题之间使用

时间:2013-08-21 22:26:46

标签: mysql

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

我有一个库存表,其中包含nameinstall_dateremoval_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并返回正确的记录?

2 个答案:

答案 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()))