我使用的是 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 Management Studio 内部的图像:
因此
Time(0)
列的值保留为我输入的值。但 Datetime2(0)
列的值末尾有 0。
为什么
DateTime2(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