DATE_ADD MySQL函数选择,条件为日期

时间:2012-09-19 14:10:53

标签: mysql sql date

当我尝试此查询时:

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS 'upgrade_date'
WHERE id=12345

它返回具有正确值的记录,但是当我添加这样的条件时:

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS 'upgrade_date'
WHERE id=12345
AND 'upgrade_date' < NOW()

它返回一个空结果集。但upgrade_date的值低于当前日期。

怎么了?

2 个答案:

答案 0 :(得分:3)

无法使用alias子句中的where 。它应该是原始列名。

SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS upgrade_date
WHERE id=12345 AND 
      upg_date < NOW()

来自 MySQL Manual

不允许在WHERE子句中引用列别名,因为在执行WHERE子句时可能尚未确定列值。

答案 1 :(得分:0)

不要在WHERE子句和别名

上使用引号
SELECT DATE_ADD(upg_date, INTERVAL 30 DAY) AS upgrade_date
                                              ^^^^^^^^^^^^
WHERE id=12345
AND upgrade_date < NOW()
    ^^^^^^^^^^^^

引号将upgrade_date转换为字符串值,而不是之前创建的字段别名。