选择两个日期时间格式之间的所有记录

6
我有一个查询需求,需要在两个日期之间选择所有记录,mysql表格的格式是datetime。
我尝试了以下代码,但没有成功。
select * from cdr
 WHERE calldate BETWEEN '2012-12-01' AND '2012-12-03';

你能更具体一些吗?出现了什么错误消息或不良结果?但它没有起作用。 - Mark Byers
3个回答

11

试一试这个:

select * from cdr
WHERE DATE(calldate) BETWEEN '20121201' AND '20121203';

1
小心,这会在大表上降低性能,因为索引将不再起作用。 - Roland Schütz
这个答案忽略了索引,是一个不好的做法。 你应该考虑使用字段值本身,并使用格式转换你的日期。 你应该使用@Rohit Suthar的答案。 - Alon Kogan

2
尝试使用这个查询 -
SELECT * FROM cdr WHERE calldate BETWEEN str_to_date('2012-12-01','%Y-%m-%d') AND str_to_date('2012-12-03','%Y-%m-%d');

1
这个实际上是有效的,并且是一个很好的练习,因为它将使用给定的格式和索引来转换日期。 - Alon Kogan
1
如果我想添加时间戳,该怎么做呢? str_to_date('2017-10-20 14:00:00', '%Y-%m-%d %H:%i:%s') - virtualLast

-1
以上方法非常有效。如果您想添加额外的条件,普通的布尔逻辑也可以与日期/时间一起使用,因此您可以执行类似以下的操作:
...
where DATE(calldate) < '20121201' AND DATE(calldate) >= '20121203' OR DATE(calldate) = '20121205'

这只是一个简单的例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接