首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Timestamp转换为在WHERE中可用查询的MYSQL日期

问将Timestamp转换为在WHERE中可用查询的MYSQL日期
EN

Stack Overflow用户
提问于 2021-08-02 00:37:01
回答 2查看 143关注 0票数 1

我正在使用一个MYSQL数据库,其中开发人员已将日期存储为时间戳,而不是可以查询的“日期时间”字段。

下面的查询创建了一个'AS‘字段date_formatted,并且输出是正确的。

但是,不能在WHERE语句中使用该字段来按日期限制它

按照日期范围限制时间戳的正确语法是什么?

代码语言:javascript
复制
SELECT *,DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS 'date_formatted' 
FROM `table` 
where 'date_formatted' >= '20210801' 

where语句返回今年的所有结果,换句话说,格式化的日期不会被视为日期时间字段,而是在where语句中使用时被视为字符串。

谢谢!

请参阅[Convert Timstamp to MYSQL Date](https://stackoverflow.com/questions/9251561/convert-timestamp-to-date-in-mysql-query)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-02 00:54:58

一种方法是使用having

代码语言:javascript
复制
SELECT t.*,
       DATE_FORMAT(FROM_UNIXTIME(`timestamp`), '%Y-%m-%d %H:%i:%s') AS date_formatted
FROM `table` t
HAVING date_formatted >= '20210801' ;

但是,最好将其表述为:

代码语言:javascript
复制
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列上的索引和统计信息。

票数 1
EN

Stack Overflow用户

发布于 2021-08-02 00:59:02

不能在where子句中使用该字段,因为要作为输出获取的列不是表的一部分。因此,将一个新列作为date_formatted添加到表中。

代码语言:javascript
复制
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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68615357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档