SQL Server 2014使用秒插入/更新smalldatetime值

时间:2016-11-22 10:06:02

标签: sql sql-server date smalldatetime

我对SQL Server中的smalldatetime数据类型有一个奇怪的问题。

我有一个非常基本的表

create table datetest (
    value   smalldatetime   not null
)

当我运行以下

insert into datetest
values ('2016-12-29 21:30:00');

我看到价值 2016-12-29 21:30:00

然后当我运行以下

update datetest
set value = '2016-12-29 21:31:30'

我看到价值 2016-12-29 21:31:00

它不包括秒。这是为什么?

4 个答案:

答案 0 :(得分:4)

这种情况正在发生,因为smalldatetime的精确度是1分钟。它通过四舍五入丢弃日期时间值中的任何秒数。例如: '2014-10-10 12:13:29'四舍五入为'2014-10-10 12:13:00''2014-10-10 12:13:30'四舍五入为'2014-10-10 12:14:00'

答案 1 :(得分:3)

这是RewriteCond %{REQUEST_FILENAME} -d RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^/webdocs(.*)$ /webdocs$1/ [L] 超过smalldatetime的特征之一。

Microsoft documentation on smalldatetime

主要的不同之处在于它向最接近的分钟舍入。如果要查看秒(和毫秒),则需要考虑datetime数据类型。

在你的例子中,它应该返回值2016-12-29 21:32:00,因为它从30秒向下舍入到下一分钟。任何不到30秒的东西都会向下舍入。实施例;

datetime

输出

CREATE TABLE #DateTest (ID int, DateValue smalldatetime)
INSERT INTO #DateTest (ID, DateValue)
VALUES
(1,'2016-12-29 21:31:29')
,(2,'2016-12-29 21:31:30')

SELECT * FROM #DateTest

进一步阅读链接;

http://blog.sqlauthority.com/2010/06/01/sql-server-precision-of-smalldatetime-a-1-minute-precision/

http://sqlcoach.blogspot.co.uk/2007/08/sql-server-storing-time-coming-soon.html

http://sqlhints.com/2016/10/10/difference-between-smalldatetime-and-datetime-data-types-in-sql-server/

答案 2 :(得分:3)

当转换为datetime时,smalldatetime值将复制到datetime值。小数秒将在接下来的最近几分钟内完成。以下代码显示将smalldatetime值转换为datetime值的结果。

 DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';  
DECLARE @datetime datetime = @smalldatetime;  

SELECT @smalldatetime AS '@smalldatetime', @datetime AS 'datetime';  

--Result  
--@smalldatetime          datetime  
------------------------- -----------------------  
--1955-12-13 12:43:00     1955-12-13 12:43:00.000  

看看MSDN Link

答案 3 :(得分:1)

它将所有秒数舍入到分钟:

  

时间范围:

     

00:00:00至23:59:59

     

2007-05-09 23:59:59将轮到

     

2007-05-10 00:00:00

请参阅 smalldatetime说明一章:https://msdn.microsoft.com/en-us/library/ms182418(v=sql.120).aspx