Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql SQLServer2005。转换(nvarchar,my_datetime_列,126)。缺失毫秒_Tsql_Sql Server 2005 - Fatal编程技术网

Tsql SQLServer2005。转换(nvarchar,my_datetime_列,126)。缺失毫秒

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

我有SQLServer2005和一个包含2列datetime类型的表

我的问题是:

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。这就是问题所在。