2

我正在使用 SQL Server 2008 R2。

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

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

在此处输入图像描述

我在此表中插入了一条记录,其中包含以下值:

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

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

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

这是 SQl Server 管理工作室中的图像: 在此处输入图像描述

所以该Time(0)列的值保持我输入的状态。但是该Datetime2(0)列的值末尾有那些 0。

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

4

1 回答 1

0

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

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

例如:

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;

结果是:

dt2                 t
1968-10-23 12:45:37 12:45:37
于 2015-07-04T12:56:44.197 回答