1

当我尝试这个查询时:

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低于当前日期。

怎么了?

4

2 回答 2

3

不能aliaswhere子句中使用 the。它应该是原始列名。

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

来自MySQL 手册

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

于 2012-09-19T14:18:19.280 回答
0

不要在 WHERE 子句和别名上使用引号

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

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

于 2012-09-19T14:12:25.953 回答