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

时间:2013-01-16 08:01:17

标签: php mysql sql date

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

现在,我正在使用一个糟糕的解决方法,假设时间差最多只有一天,但情况并非总是如此。可能有一种简单的方法可以实现这一点,但我无法弄清楚是什么。谢谢!

2 个答案:

答案 0 :(得分:2)

使用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,这对于大型数据库来说效果非常差。

答案 1 :(得分:1)

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