我试图在MySQL中使用以下SQL条件获取日期范围。
and a.timestamp >= '2016-03-29'
and a.timestamp <= '2016-03-30'
这会返回0行,但是当我尝试更长的范围时,如
和a.timestamp&gt; ='2016-03-20' 和a.timestamp&lt; ='2016-03-31'
中2016-03-29和2016-03-30的条件是否会返回图像中的行。感谢
答案 0 :(得分:3)
2016-03-30午夜之后的任何时间都大于2016-03-30,所以你需要像这样检查以获得像“2016-03-30 15:55”这样的值
and a.timestamp >= '2016-03-29'
and a.timestamp < '2016-03-31'
这将返回3月29日和3月30日的所有日期时间值。
答案 1 :(得分:3)
据推测,2016-03-29没有价值。所以,您只想考虑 date 部分。一种方法是使用date()
:
date(a.timestamp) >= '2016-03-29' and date(a.timestamp) <= '2016-03-30'
然而,这是一个坏习惯,因为使用该功能会排除使用索引(如果可用)。相反,你可能打算:
a.timestamp >= '2016-03-29' and a.timestamp < '2016-03-31'
请注意第二个条件的<=
更改为<
。这会在该日期之前获得所有内容,但不会在当天开始的午夜时分。
答案 2 :(得分:0)
您还可以CONVERT
日期,剥离时间:
and CONVERT(a.timestamp, date) >= '2016-03-29'
and CONVERT(a.timestamp, date) <= '2016-03-31'
您的查询未返回特定行的原因是2016-03-31 00:00:01
大于2016-03-31
您还可以使用BETWEEN
子句:
AND CONVERT(a.timestamp, date) BETWEEN '2016-03-29' AND '2016-03-31'