2012-03-15 2 views
1

Мне нужно преобразовать строку в datetime. Мне нужно хранить datetime с миллисекунды в SQL Server 2005.Преобразование строк в DATETIME в SQL Server

пример:

SELECT CAST('2010-07-28 20:07:25.733000000' AS DATETIME) 

когда я пытаюсь я получаю сообщение об ошибке, как

преобразование не удалось при преобразовании DateTime из строки символов

+0

В дополнении к существующим ответам, стоит отметить, что если вы собираетесь продолжать конвертировать в 'datetime', а не 'datetime2', вы должны заменить пробел между датой и временем буквой' T'. Например. ''2010-07-28T20: 07: 25.733'' - в противном случае преобразование может завершиться неудачно, если действуют разные языковые настройки. –

ответ

3

Вам нужно усечь.

SELECT CONVERT(DATETIME, CONVERT(CHAR(23), '2010-07-28 20:07:25.733000000')); 
+0

, но мне нужно хранить полную стоимость. I mean '2010-07-28 20: 07: 25.733000000' –

+1

... и, как указывает @Damien_The_Unbeliever, вы должны быть уверены, что ваши настройки языка и даты заданы, или просто перейдите в 'yyyy-mm-ddThh: mm: ss.mmm' в первую очередь. –

+0

Затем вы используете неправильный тип данных. Если вы используете SQL Server 2008, вы должны использовать 'datetime2'. Если нет, тогда нет возможности сохранить это в SQL Server 2005 или ниже, используя собственный тип даты и времени. Вы можете сохранить его как строку, но я не рекомендую это делать. Если они всегда заканчиваются нулями, зачем их хранить? Вы всегда можете добавить их во время презентации. –

2

(с округлением) диапазон milisecond находится в DATETIME 0-999, для более точного использования DATETIME2, если вы используете SQL2K8.

+0

Я использую SQL2K5. это любой другой способ работы –

+0

усекать, чтобы вы не обеспечивали> 3 десятичных разряда, как в ответе Аарона, или вы имеете в виду сохранение более миллисекундной точности? –

1

Если вы удалите последний 0: S в миллисекундах это будет работать:

SELECT CAST('2010-07-28 20:07:25:733' AS DATETIME) 
Смежные вопросы