rah*_*rma 2 sql sql-server datetime rounding sql-server-2008-r2
我正在使用sql server 2008 R2,由于一个问题,我能够知道smalldatetime将ss舍入到最接近的分钟.这是来自MSDN的内容.
ss is two digits, ranging from 00 to 59, that represent the second. Values that are 29.998 seconds or less are rounded down to the nearest minute, Values of 29.999 seconds or more are rounded up to the nearest minute.
现在我面临一个问题,因为我将我的参数类型设置storedproceduer为smalldatetime,当我将'2014-03-23 23:59:59'其转换为日期时2014-03-24 00:00:00
我发现,我应该从转换参数的解决方案smalldatetime,以nvarchar(30)
问题解决了.
但我真正的问题是为什么这种smalldatetime四舍五入的行为ss会改变这一天?
你可以尝试以下查询
DECLARE @EndDate smallDatetime
SET @EndDate = '2014-03-23 23:59:59'
SELECT @EndDate
DECLARE @EndDate smallDatetime
SET @EndDate = '2014-03-23 23:59:30'
SELECT @EndDate
DECLARE @EndDate smallDatetime
SET @EndDate = '2014-03-23 23:59:29'
SELECT @EndDate
每当我看到有人23:59:59在SQL中使用时,警报就会响起.
这几乎总是因为他们希望通过执行以下操作返回查询中的全天数据:
WHERE  date_field BETWEEN '2014-03-19 00:00:00' AND '2014-03-19 23:59:59'
这是因为BETWEEN包含边界值,您可能不希望2014-03-20 00:00:00包含值.
以上查询相当于:
WHERE  date_field >= '2014-03-19 00:00:00'
AND    date_field <= '2014-03-19 23:59:59'
WHERE  date_field >= '2014-03-19 00:00:00'
AND    date_field <  '2014-03-20 00:00:00'
注意运营商的细微差别.