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