【问题标题】:Mysql Query issue using betweenMysql查询问题使用之间
【发布时间】: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 并返回正确的记录?

【问题讨论】:

    标签: mysql


    【解决方案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

    【讨论】:

    【解决方案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()))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2011-11-26
      相关资源
      最近更新 更多