mysql - 选择日期时间大于指定日期的记录

标签 mysql sql

问题

我试图通过运行下面提到的查询从表中获取所有记录,其中 date_time 字段大于“Thu, 11 Jul 2013”。 date_time 字段中的值以这种格式 => Thu, 11 Jul 2013 08:29:37 存储。任何帮助都会很棒。

字段date_time的数据类型是varchar

查询

SELECT * FROM table_name 
WHERE username = 'mark@example.com' 
AND STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= 'Thu, 11 Jul 2013 00:00:00';

最佳答案

这是另一个很好的例子,说明为什么您应该使用日期、日期时间或时间戳字段类型在 MySQL 中实现日期/时间字段,并让您的应用程序处理如何格式化输出日期。

现在您需要执行以下操作:

SELECT * FROM table_name 
WHERE username = 'mark@example.com' 
AND STR_TO_DATE(date_time, '%a, %e %b %Y %H:%i:%s') >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s');

此查询将无法使用您在 date_time 字段上的任何索引,因此查询效率会非常低。它将需要执行全表扫描,转换每一行的值以便进行比较。

你应该做的是:

SELECT * FROM table_name 
WHERE username = 'mark@example.com' 
AND date_time >= STR_TO_DATE('Thu, 11 Jul 2013 00:00:00', '%a, %e %b %Y %H:%i:%s');

这里如果你的字段是MySQL日期时间格式,你只需要将输入转换成这种格式进行匹配。由于您的现场数据已经采用这种格式,您将能够利用索引进行搜索。

关于mysql - 选择日期时间大于指定日期的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17659577/

相关文章:

mysql - 每隔 30 天生成一次报告,每日总计

mysql - 有两张表 - 一张用于选择,一张用于更新

mysql - SQL删除回车

mysql - 谷歌云sql连接不上mysql客户端

mysql - 在大型 csv 文件中搜索

terminal - 在终端中运行我的 sql 转储

mysql - 计算两点之间的距离非常慢

php - MySQL - 按总时间排序结果

sql - 在特定类别中获取带有附件的帖子?

sql - 列复制和更新与列创建和插入