MySQL-返回两个日期/时间之间的行


MySQL - Returning rows between two dates/times

我正在使用的MySQL表将日期和时间作为单独的列。日期的格式为"y-m-d""hh:mm:ss"表示时间。如果两次之间的行在不同的日期,我该如何搜索它们?(例如2013-01-15 12:00:002013-01-17 17:00:00之间的行(

现在,我使用了一个糟糕的变通方法,假设时差最多只有一天,但情况并非总是如此。也许有一种简单的方法可以实现这一点,但我就是不知道是什么。谢谢

使用CONCAT 连接字段

SELECT  *
FROM    tableName
WHERE   CONCAT(dateCol, ' ', timeColumn) BETWEEN
            '2013-01-15 12:00:00' AND '2013-01-17 17:00:00'

但我建议您(如果可能的话(通过将数据类型为DateTime的两列组合来更改表,这样您就可以利用索引。上面使用CONCAT的查询需要full table scan,这对于大型数据库来说性能非常差。

JW.'通过首先使用索引缩小搜索空间,然后将结果精简到正确的集合,可以加快答案的速度。

select * from births
where date between '2013-01-15' and '2013-01-17' -- use index
and concat(date, ' ', time) between '2013-01-15 12:00:00' and '2013-01-17 17:00:00' 
;

有关更多详细信息,请参阅此SQL Fiddle。