在SQL Server中使用Time(0)和Datetime2(0)

时间:2015-07-04 12:42:03

标签: sql-server sql-server-2008-r2 datetime2

我正在使用SQL Server 2008 R2。

使用SQL Server Management Studio,我创建了一个数据库和一个新表。

在表格中,我有两列数据类型Time(0)Datetime2(0)

enter image description here

我在此表中插入了一条记录值:

12:50:34...........2015-02-02 12:50:34

但保存此记录时,值如下所示:

12:50:34...........2015-02-02 12:50:34.0000000

这是SQl Server管理工作室内的图像: enter image description here

因此Time(0)列的值保持为我输入的值。但Datetime2(0)列的值最后为0。

为什么DateTime2(0)列的值会发生变化?

1 个答案:

答案 0 :(得分:0)

  

Datetime2(0)表示小数精度为0

我认为当SQL Server以类型datetime2存储日期然后读取该数据时,认为它具有精度为7毫秒的datetime2,然后将其截断为n或{ {1}}在这种情况下:

例如:

0

结果将是

DECLARE @d1 datetime2 = CAST('1968-10-23 12:45:37.1237' AS datetime2(0))
        @d2 datetime(0) =  '1968-10-23 12:45:37.1237';

SELECT @d1, @d2;

这个(结果)与1968-10-23 12:45:37.0000000 1968-10-23 12:45:37 相同:

time(0)

因此,当您使用DECLARE @t1 time = CAST('1968-10-23 12:45:37.1237' AS datetime2(0)), @t2 time(0) = '1968-10-23 12:45:37.1237'; SELECT @t1, @t2 datetime(0)作为列的类型时,行为是相同的:

time(0)

结果是:

DECLARE @t table(dt2 datetime2(0), t time(0));

INSERT INTO @t VALUES ('1968-10-23 12:45:37.1237', '1968-10-23 12:45:37.1237');

SELECT * FROM @t;