1

我有 SQL Server 2005 和一个有 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

如您所见,第二列没有毫秒。为什么?

4

3 回答 3

4

根本没有毫秒部分,你可以.000手动添加:

select 
    DocDate, 
    left(CONVERT(nvarchar, DocDate, 126) + '.000', 23)
    _stamp, 
    left(CONVERT(nvarchar, _stamp, 126) + '.000', 23)
from 
    dochead 
where 
    id = 4493130

现场示例:http ://sqlfiddle.com/#!3/d41d8/955

于 2012-05-10T10:31:13.413 回答
2

这是一个有效的 ISO 8601 日期时间表示,这就是你得到的所有格式。126讨厌引用维基百科,但是:

  • 为了降低准确性,[5] 可以从任何日期和时间表示中删除任意数量的值,但顺序是从最不重要到最重要。例如,“2004-05”是一个有效的 ISO 8601 日期,表示 2004 年 5 月(第五个月)。这种格式永远不会表示 2004 年未指定月份的第 5 天,也不会表示从2004 年到 2005 年。

  • 如果特定应用需要,该标准支持将小数部分添加到表示中的最小时间值。

因此,秒的小数部分(例如毫秒)是这种格式的可选部分。

于 2012-05-10T10:45:39.677 回答
0

尝试这个

select 
DocDate, 
CONVERT(nvarchar, DocDate, 126), _stamp, 
CONVERT(nvarchar, _stamp, 126) 
from  dochead where 
id = 4493130
于 2012-05-10T09:50:17.737 回答