我正在使用的MySQL表将日期和时间作为单独的列。日期的格式为"y-m-d"
和"hh:mm:ss"
。如果它们在不同的日子里,我究竟如何在两次之间搜索行? (例如2013-01-15 12:00:00
和2013-01-17 17:00:00
之间的行)
现在,我正在使用一个糟糕的解决方法,假设时间差最多只有一天,但情况并非总是如此。可能有一种简单的方法可以实现这一点,但我无法弄清楚是什么。谢谢!
答案 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。