如何在两个日期之间搜索,当数据库中的日期格式如:
2015-10-10 02:23:41 am
我只想在两个日期之间搜索格式:
2015-10-10
无
02:23:41 am
有什么想法吗?
您的问题并不完全清楚。但是,我想您希望在表中找到Date
出现在2015-08-05
午夜或之后以及2015-09-11
午夜之前(您在问题中给出的范围结束后的第二天)的所有行。
这两个搜索条件将在您指定的范围内查找具有Date
值的所有行。(我忽略了你问题中2015-09-10 02
末尾的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条件不是可搜索的,因此查询速度会较慢。
请注意,范围的开头使用>=
——在午夜或午夜之后,范围的末尾使用<
——在午夜之前。
专业提示:避免在列名中使用像DATE
这样的保留字。如果你在编写查询时出错,它们的存在会让MySQL感到困惑,更不用说你了,还会让你放慢速度。
我可以建议:
select * from table where cast(date as date) between '2015-08-05' and '2015-09-10'
如果where子句基于时间戳,但使用日期作为介于两者之间的参数,则它会排除在第二个日期发生的任何事情,除非它恰好发生在午夜。
使用范围的结束日期时,包括一天结束的时间:
SELECT *
FROM YourTable
WHERE date BETWEEN '2015-08-05' AND '2015-09-10 23:59:59'