问题
我试图通过运行下面提到的查询从表中获取所有记录,其中 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/