当我尝试此查询时:
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
的值低于当前日期。
怎么了?
答案 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转换为字符串值,而不是之前创建的字段别名。