如何在两个日期之间进行搜索,当数据库中的日期格式为:
2015-10-10 02:23:41 am
我只想在两个日期格式之间进行搜索:
2015-10-10
没有
02:23:41 am
请问任何想法?
答案 0 :(得分:1)
你的问题并不完全清楚。但是,我想您希望找到表格中Date
在2015-08-05
午夜或午夜2015-09-11
以及Date
午夜之后发生的所有行(您在该范围结束后的第二天)提出了你的问题。
这两个搜索条件将在您指定的范围内找到02
个值的所有行。 (我在你的问题中忽略了2015-09-10 02
末尾的 SELECT *
FROM table
WHERE `Date` >= '2015-08-05'
AND `Date` < '2015-09-10' + INTERVAL 1 DAY
因为我无法猜出它是什么意思,如果有的话。)
尝试此查询:
Date
如果您有一个索引,它可以利用 SELECT *
FROM table /* slow! */
WHERE DATE(`Date`) BETWEEN '2015-08-05' AND '2015-09-10'
列上的索引,因此它可以很快。
你可以写
>=
这稍微容易阅读,但WHERE条件不是sargable,因此查询速度会慢一些。
请注意,范围的开头使用<
- 在午夜或之后,范围的结尾使用DATE
- 在午夜之前。
专业提示:避免使用{{1}}之类的保留字作为列名。如果你在编写查询时犯了错误,那么他们的存在可能会让MySQL感到困惑,更不用说你了,并让你慢下来。
答案 1 :(得分:0)
我可以建议:
select * from table where cast(date as date) between '2015-08-05' and '2015-09-10'
如果您的where子句基于时间戳,但您使用日期作为中间人的参数,则会排除第二个日期发生的任何事情,除非它恰好发生在午夜。
答案 2 :(得分:0)
使用范围的结束日期时,请包括当天结束的时间:
SELECT *
FROM YourTable
WHERE date BETWEEN '2015-08-05' AND '2015-09-10 23:59:59'