Mysql查询问题使用之间

Posted

技术标签:

【中文标题】Mysql查询问题使用之间【英文标题】:Mysql Query issue using between 【发布时间】:2013-08-21 22:26:45 【问题描述】:

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

我有一个库存表,其中包含 nameinstall_dateremoval_date,我有一个 master_date 表,其中包含从 2012 年 1 月 1 日到 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 并返回正确的记录?

【问题讨论】:

【参考方案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

【讨论】:

根据这个 SO answer,似乎 COALESCE() 是标准的,而 IFNULL() 不是。 ***.com/questions/4747877/…【参考方案2】:

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

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

【讨论】:

以上是关于Mysql查询问题使用之间的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询使用两个日期之间检索记录

在日期之间选择mysql查询?

在mysql查询中使用php time()函数计算两个日期之间的差异

MYSQL:使用 date_format 查询两个日期之间的数据不起作用

这两个mysql查询之间的区别?

这些查询 MySQL 日期范围之间有啥区别