将时间戳转换为可在 WHERE 中使用的查询中的 MYSQL 日期
Convert Timestamp to MYSQL Date In Query usable in WHERE
我正在使用 MYSQL 数据库,其中开发人员将日期存储为时间戳而不是可以查询的 'datetime' 字段。
下面的查询创建了一个 'AS' 字段 date_formatted 并且输出是正确的。
但是不能在 WHERE 语句中使用该字段来按日期限制它
通过日期范围限制时间戳的正确语法是什么?
SELECT *,DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS 'date_formatted'
FROM `table`
where 'date_formatted' >= '20210801'
where 语句 returns 今年的所有结果,换句话说,格式化日期未被视为日期时间字段,当在 where 语句中使用时,它被视为字符串。
谢谢!
见[Convert Timstamp to MYSQL Date]1
一种方法是使用 having
:
SELECT t.*,
DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS date_formatted
FROM `table` t
HAVING date_formatted >= '20210801' ;
但是,最好将其表述为:
SELECT t.*,
DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS date_formatted
FROM `table` t
WHERE timestamp >= UNIX_TIMESTAMP('2021-08-01');
此优化器利用 timestamp
列上的索引和统计信息。
该字段不能在 where 子句中使用,因为您作为输出获得的列不是 table 的一部分。因此,将新列添加到 table 作为 date_formatted。
ALTER TABLE table
ADD date_formatted date;
UPDATE table
SET date_formatted = DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s')
现在,在下一步中,您可以在 WHERE 子句中使用 date_formatted。
我正在使用 MYSQL 数据库,其中开发人员将日期存储为时间戳而不是可以查询的 'datetime' 字段。
下面的查询创建了一个 'AS' 字段 date_formatted 并且输出是正确的。
但是不能在 WHERE 语句中使用该字段来按日期限制它
通过日期范围限制时间戳的正确语法是什么?
SELECT *,DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS 'date_formatted'
FROM `table`
where 'date_formatted' >= '20210801'
where 语句 returns 今年的所有结果,换句话说,格式化日期未被视为日期时间字段,当在 where 语句中使用时,它被视为字符串。
谢谢!
见[Convert Timstamp to MYSQL Date]1
一种方法是使用 having
:
SELECT t.*,
DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS date_formatted
FROM `table` t
HAVING date_formatted >= '20210801' ;
但是,最好将其表述为:
SELECT t.*,
DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS date_formatted
FROM `table` t
WHERE timestamp >= UNIX_TIMESTAMP('2021-08-01');
此优化器利用 timestamp
列上的索引和统计信息。
该字段不能在 where 子句中使用,因为您作为输出获得的列不是 table 的一部分。因此,将新列添加到 table 作为 date_formatted。
ALTER TABLE table
ADD date_formatted date;
UPDATE table
SET date_formatted = DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s')
现在,在下一步中,您可以在 WHERE 子句中使用 date_formatted。