我正在使用SQL Server 2008 R2。
使用SQL Server Management Studio,我创建了一个数据库和一个新表。
在表格中,我有两列数据类型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)
列的值会发生变化?
答案 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;