我正在使用的 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。