这个问题在这里已经有答案了:
你能在mysql的where子句中使用别名吗(5个答案)
两年前关门了。
所以我想用 Between
时间戳如下所示,我将日期存储为unix时间戳,我首先尝试转换它,然后获取所述时间之间的所有用户。
SELECT
users.*,
DATE_FORMAT(
FROM_UNIXTIME(users.created),
'%Y %b %e '
) AS date_formatted
FROM
node
LEFT JOIN users
ON node.uid = users.uid
WHERE node.uid != 0
AND
(date_formatted BETWEEN '2017-06-30 00:00:00' AND '2018-06-30 00:00:00')
GROUP BY uid
但我得到了这个错误
“where子句”中的未知列“date\u formatted”
1条答案
按热度按时间h7appiyu1#
正如评论中提到的,问题是“date\u formatted”是结果的别名。它不在表本身中,因此不能在where语句中调用它。您可以在查询结束时使用having语句调用它,但这意味着查询必须首先提取比您需要的多得多的数据。mysql在日期方面做了大量的隐式转换,所以您可以使用:
但是如果您不想冒险,可以在where语句中应用格式化/强制转换。