Sql条件返回特定的日期范围

时间:2016-04-04 14:45:37

标签: mysql sql

我试图在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'

它返回我想要的行,如下所示,在时间戳列enter image description here

2016-03-29和2016-03-30的条件是否会返回图像中的行。感谢

3 个答案:

答案 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'