我正在使用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
中有参数类型是当我通过'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
答案 0 :(得分:5)
23:59:59
时,警报就会响起。
这几乎总是因为他们希望通过执行以下操作返回查询中的全天数据:
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'
注意运营商的细微差别。
答案 1 :(得分:3)
因为那是最接近的分钟。
鉴于它被定义为在29.998秒或更高的时间点,你还会得到什么结果呢?在23:58:30,你希望它能够回到23:59 - 为什么一分钟后行为会有所不同?
如果您想要更精确的日期/时间衡量,请使用datetime
或datetime2
- 而不是nvarchar