Sql server 在SQL Server中使用时间(0)和日期时间2(0)

Sql server 在SQL Server中使用时间(0)和日期时间2(0),sql-server,sql-server-2008-r2,datetime2,Sql Server,Sql Server 2008 R2,Datetime2,我正在使用SQLServer2008R2 使用SQLServerManagementStudio,我创建了一个数据库和一个新表 在表中,我有两列数据类型为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 st

我正在使用SQLServer2008R2

使用SQLServerManagementStudio,我创建了一个数据库和一个新表

在表中,我有两列数据类型为
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
此(结果)与时间(0)相同。:


因此,当您使用
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

我的问题是,为什么在时间(0)的情况下,结尾处的额外0不会被添加,但在DateTime2(0)上,这些0会保留结尾?我有一种情况,两个值上的时间都没有毫秒。@alex,因为我测试并添加到
time(0)
datetime2(0)
的答案结果是相同的,并且没有任何尾随
0
;)。@shA.t请看我更新的问题上的图片。此图像是使用以下方法生成的:编辑前200行。您是否也可以添加您的表结构(如create语句)和对该结果的查询;)。@我已经添加了表结构。我重复一下,为了生成带有值的表,我使用了SQLServerManagementStudio中的Edit top 200行。这可能是SSMS中的一个错误。如果执行
SELECT*FRON tab
命令,它将返回
DATETIME2(0)
而不返回纳秒:
2015-02-02-12:50:34
。好的,但哪个是正确的:查询还是SSMS?为什么?
dt2                 t
1968-10-23 12:45:37 12:45:37