MSSQL查询几个日期范围

时间:2014-02-07 09:38:49

标签: sql sql-server

我正在尝试查询多个日期范围的数据。这就是我写的:

Select Datetime, Round(value,3) As v
From myTable
Where charfield = 'WHATEVER'
And ((Datetime between '2014-02-01 00:00' AND '2014-02-01 23:59')
  OR (Datetime between '2014-02-02 00:00' AND '2014-02-02 23:59')
  OR (Datetime between '2014-02-03 00:00' AND '2014-02-03 23:59')
  OR (Datetime between '2014-02-04 00:00' AND '2014-02-04 23:59'))

但我只从最后一个范围('2014-02-04')获取数据,我不知道为什么。我也确定其他区间也有数据。

请忽略间隔是连续的事实,这只是一个例子。在实际代码中,间隔范围完全是任意的。

1 个答案:

答案 0 :(得分:0)

  
    

当您使用BETWEEN时,该列同时包含日期和时间     元素,你用什么作为最终价值?正如你可能意识到的那样     不同的类型,有不同的精度。更重要的是,假设     类型是DATETIME,并使用以下谓词。

  
WHERE
orderdate BETWEEN '20070201' AND '20070228 23:59:59.999'
  

这种类型    精度是三和三毫秒。毫秒的一部分    终点999不是精度单位的乘法,所以    SQL Server最终将该值四舍五入到2007年3月1日的午夜    结果,你最终可能得到一些你不应该的订单    查看。简而言之,使用> =和&lt ;,而不是BETWEEN,这个形式将会    在所有情况下都能正常工作,包括所有日期和时间类型    时间部分是否适用。查询Microsoft SQL Server 2012转换工具包70-461