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

问题描述 投票:0回答:1

我使用的是 SQL Server 2008 R2。

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

在表中,我有 2 列,数据类型为

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 Management Studio 内部的图像: enter image description here

因此

Time(0)
列的值保留为我输入的值。但
Datetime2(0)
列的值末尾有 0。

为什么

DateTime2(0)
列的值会改变?

sql-server sql-server-2008-r2 datetime2
1个回答
0
投票

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

我认为当 SQL Server 以

datetime2
类型存储日期然后读取该数据时,认为它有一个
datetime2
,精度为 7 毫秒,然后在本例中将其截断为
n
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;

结果是:

dt2                 t
1968-10-23 12:45:37 12:45:37
© www.soinside.com 2019 - 2024. All rights reserved.