这是我的代码:
DECLARE @d1 DATETIME
DECLARE @d2 DATETIME
SET @d1 = '2015-01-01 00:00:00'
SET @d2 = '2015-12-31 23:59:59.999'
SELECT
CASE
WHEN ('2016-01-01 00:00:00' BETWEEN @d1 AND @d2)
THEN 'is between'
ELSE 'not between'
END AS BetweenOrNotBetween
我提供的日期比“BETWEEN”函数的范围晚1毫秒,但在我的SQL 2008服务器实例上,结果是“is between”,而不是预期的“not between”。这是一个错误吗?还是因为某种原因在设计中必须做出妥协,我没有看到?是的,一旦我添加了2016-01-01午夜之后的甚至一小部分时间,我就会得到预期的“not between”结果。
DATETIME2(3)
作为数据类型进行相同的操作 - 它会起作用。从SQL Server 2008开始,我建议您尽可能使用DATETIME2(3)
而不是DATETIME
。 - marc_s