Mysql查询问题使用之间
Posted
技术标签:
【中文标题】Mysql查询问题使用之间【英文标题】:Mysql Query issue using between 【发布时间】:2013-08-21 22:26:45 【问题描述】:我正在尝试仅根据安装和移除日期来跟踪库存,并报告任何一天的安装情况。仍在安装的记录没有删除日期。所以我试图将删除日期设置为Date(now())
。但是当我在install_date
和removal_date
之间添加时,它只会找到两个日期的记录。
我有一个库存表,其中包含 name
、install_date
和 removal_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查询中使用php time()函数计算两个日期之间的差异