我正在尝试查询多个日期范围的数据。这就是我写的:
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'
)获取数据,我不知道为什么。我也确定其他区间也有数据。
请忽略间隔是连续的事实,这只是一个例子。在实际代码中,间隔范围完全是任意的。
答案 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