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