2012-05-10 7 views
1

私はSQL Server 2005とタイプがdatetimeの2列のテーブルを持っています。SQL Server 2005. Convert(nvarchar、my_datetime_column、126)。不足しているミリ秒

私のクエリは次のとおりです。

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 

あなたは2番目の列はミリ秒を持っていない見ることができるように。どうして?

+0

あなたの '(n)varchar'列には常に** length **を定義する必要があります!さもなければ、あなたはある時点で1文字の長い文字列で終わるかもしれません。だから、 'CONVERT(VARCHAR(50)、...)'などを使用してください - ちょうど良い習慣を採用すること –

+0

なぜですかミリ秒は0であるときに含めることが重要だと思いますか? –

答えて

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

0

することは全くミリ秒部分はありません。この

select 
DocDate, 
CONVERT(nvarchar, DocDate, 126), _stamp, 
CONVERT(nvarchar, _stamp, 126) 
from dochead where 
id = 4493130 
2

をそれは、有効なISO 8601日時表現ですそれはすべてformat 126あなたが得ると言うことです。 Wikipediaを引用する嫌いが、:減少精度について

  • 、[5]のいずれかの値の数は、日付と時刻の表現のいずれかから削除されてもよいが、順番に、少なくとも最も重要に。たとえば、「2004-05」は有効なISO 8601の日付で、2004年5月(5番目の月)を示します。この形式は、2004年の未指定月の5日目を表すことはなく、

  • 特定のアプリケーションに必要な場合、標準では表現の最小時間値に小数点以下の桁数を追加することができます。

そこで第二(例えばミリ秒)の小数の形式の任意の部分です。

+0

Damienありがとうございます。私が持っている。私はその部分(ミリ秒)が必須であると思っています(SQLブックに合わせて)。私たちのシステムの一部では、この日付はParseExactとして解析されます。それが問題でした。 – IVerzin