Tsql SQLServer2005。转换(nvarchar,my_datetime_列,126)。缺失毫秒
我有SQLServer2005和一个包含2列datetime类型的表 我的问题是:Tsql SQLServer2005。转换(nvarchar,my_datetime_列,126)。缺失毫秒,tsql,sql-server-2005,Tsql,Sql Server 2005,我有SQLServer2005和一个包含2列datetime类型的表 我的问题是: select DocDate, CONVERT(nvarchar, DocDate, 126), _stamp, CONVERT(nvarchar, _stamp, 126) from dochead where id = 4493130 结果是: DocDate (no column name) _s
select
DocDate,
CONVERT(nvarchar, DocDate, 126),
_stamp,
CONVERT(nvarchar, _stamp, 126)
from
dochead
where
id = 4493130
结果是:
DocDate (no column name) _stamp (no column name)
2011-08-31 00:00:00.000 2011-08-31T00:00:00 2011-08-31 16:01:17.243 2011-08-31T16:01:17.243
正如您所看到的,第二列没有毫秒。为什么?试试这个
select
DocDate,
CONVERT(nvarchar, DocDate, 126), _stamp,
CONVERT(nvarchar, _stamp, 126)
from dochead where
id = 4493130
试试这个
select
DocDate,
CONVERT(nvarchar, DocDate, 126), _stamp,
CONVERT(nvarchar, _stamp, 126)
from dochead where
id = 4493130
根本没有毫秒部分,您可以手动添加.000:
select
DocDate,
left(CONVERT(nvarchar, DocDate, 126) + '.000', 23)
_stamp,
left(CONVERT(nvarchar, _stamp, 126) + '.000', 23)
from
dochead
where
id = 4493130
实例:根本没有毫秒部分,您可以手动添加.000:
select
DocDate,
left(CONVERT(nvarchar, DocDate, 126) + '.000', 23)
_stamp,
left(CONVERT(nvarchar, _stamp, 126) + '.000', 23)
from
dochead
where
id = 4493130
实例:这是一个有效的ISO 8601日期时间表示,这就是您所得到的全部信息。不想引用,但是: 为了降低精度,[5]可以从任何日期和时间表示中删除任意数量的值,但顺序是从最小值到最大值。例如,2004-05是一个有效的ISO 8601日期,表示2004年5月是第五个月。此格式永远不会表示2004年未指定月份的第5天,也不会表示从2004年到2005年的时间跨度 如果特定应用需要,本标准支持在表示法中的最小时间值上添加小数点
因此,秒的小数部分(例如毫秒)是此格式的可选部分。这是一种有效的ISO 8601日期时间表示形式,这就是您得到的全部信息。不想引用,但是: 为了降低精度,[5]可以从任何日期和时间表示中删除任意数量的值,但顺序是从最小值到最大值。例如,2004-05是一个有效的ISO 8601日期,表示2004年5月是第五个月。此格式永远不会表示2004年未指定月份的第5天,也不会表示从2004年到2005年的时间跨度 如果特定应用需要,本标准支持在表示法中的最小时间值上添加小数点
因此,秒的小数部分(例如毫秒)是此格式的可选部分。您应该始终为nvarchar列定义长度!否则,您可能会在某个时候得到一个1个字符长的字符串。。。。所以使用CONVERTVARCHAR50。。。或者类似的东西-这只是一个好习惯-为什么您认为毫秒数为0时包含毫秒数很重要?您应该始终为nvarchar列定义一个长度!否则,您可能会在某个时候得到一个1个字符长的字符串。。。。所以使用CONVERTVARCHAR50。。。或者类似的东西——这只是一个好习惯——为什么你认为毫秒数为0时包含进去很重要?谢谢Damien。我有。根据sql书籍,我认为毫秒部分是必须的。在我们系统的一部分中,这个日期被解析为ParseExact。这就是问题所在,谢谢Damien。我有。根据sql书籍,我认为毫秒部分是必须的。在我们系统的一部分中,这个日期被解析为ParseExact。这就是问题所在。