结果在BETWEEEN或> =和< =两个日期之间缺少数据

时间:2014-11-12 02:55:07

标签: sql sql-server sql-server-2008 tsql datetime

从...开始

SET @DATEFROM = '2014-04-01'
SET @DATETO = '2014-10-01'

...,我正在尝试使用以下过滤器进行查询:

C.DateCreate BETWEEN @DATEFROM AND @DATETO)

C.DateCreate >= @DATEFROM AND C.DateCreate <= @DATETO

两者都返回相同的结果集,不包括当前月份(10月份)的数据。

我想要10月份的数据。显然这就是我的设定。请问有解决方法吗?

2 个答案:

答案 0 :(得分:1)

您将在4月1日至10月1日之间过滤所有内容 - 并且在10月份不包括任何内容。真的很简单。也许你一直在盯着这个太长时间(严肃而非讽刺)。

如果你想在2014年10月完成所有事情,试试这个:

SET @DATEFROM = '2014-10-01' -- or '2014-04-01' if you truly want to include data back to April
SET @DATETO = '2014-11-01'

-- .
-- .
-- .
C.DateCreate >= @DATEFROM AND C.DateCreate < @DATETO

请注意,我在<=比较中将<替换为@DATETO并将@DATETO设置为11月1日而不是10月31日 - 因为前者是11月1日的午夜(也就是说,任何比这更小的东西都会像你想要的那样落到十月到最后一刻。

答案 1 :(得分:1)

如果你想要十月,并且你想使用这些限制,我建议:

C.DateCreate >= @DATEFROM AND C.DateCreate < DATEADD(MONTH, 1, @DATETO)