2012-05-10 2 views
1

У меня есть SQL Server 2005 и таблица с 2 столбцами типа datetime.SQL Server 2005. Конвертировать (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 

Как вы можете видеть, второй столбец не имеет миллисекунды. Зачем?

+0

Вы должны всегда указывать ** длину ** для своего столбца '(n) varchar'! В противном случае у вас может получиться 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 DateTime представление, это все, что format 126 говорит, что вы получаете. Ненависть цитировать Wikipedia, но:

  • Для пониженной точности, [5] любое число значений может быть исключено из любых из даты и времени представления, но в порядке от наименее до наиболее значительного , Например, «2004-05» является действительной датой ISO 8601, которая указывает на май (пятый месяц) 2004. Этот формат никогда не будет представлять 5-й день неопределенного месяца в 2004 году и не будет представлять собой промежуток времени, простирающийся от 2004 по 2005 год.

  • При необходимости для конкретного приложения стандарт поддерживает добавление десятичной дроби до наименьшего значения времени в представлении.

Так десятичная доля секунды (например, миллисекунды) является дополнительной частью этого формата.

+0

Спасибо, Дэмиен. У меня есть. Я думал (согласно книгам sql), что часть (миллисекунды) является обязательной. В части нашей системы эта дата анализируется как ParseExact. Это была проблема. – IVerzin

Смежные вопросы