2013-04-08 2 views
1

У меня есть данные, как показано нижеПреобразовать VARCHAR 2007-12-19-11.57.17.366731 для даты и времени типа данных

2007-12-19-11.57.17.366731 

и тип данных varchar(26)

Я хочу изменить только тип данных для datetime.

Я пробовал весь синтаксис, но не использовать, и я получаю

Преобразование типа VARCHAR данных в тип данных даты и времени привел к значению вне-диапазона.

Вот пример я пытаюсь

SELECT CONVERT(Datetime, '2007-12-19-11.57.17.366731', 120) 

Благодарности

ответ

0

Вы пытаетесь предложить неприемлемый формат datetime. Это правильный формат:

SELECT CONVERT(Datetime, '2007-12-19 11:57:17.366', 120) 
0

Смотрите этот другой вопрос: Best way to parse DateTime to SQL server

Вы должны пройти «безопасный» формат для функции DateTime, что означает, что вам придется разобрать строку на его компоненты , затем передайте его в правильном формате DateTime

1

Ну, прежде всего, вам нужно добавить некоторую строчную магию, чтобы преобразовать ваши данные в accepeted формат для DATETIME. И вам также нужно использовать меньше miliseconds (для DATETIME у вас есть 3 цифры для него), в SQL Server 2008 вы можете использовать DATETIME2 для этого. Попробуйте следующее:

DECLARE @Value VARCHAR(26) 
SET @Value = '2007-12-19-11.57.17.366731' 

SELECT CONVERT(DATETIME,LEFT(@Value,10) + ' ' + 
         REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' + 
         SUBSTRING(@Value,21,3), 120) ValueAsDatetime, 
     CONVERT(DATETIME2,LEFT(@Value,10) + ' ' + 
         REPLACE(SUBSTRING(@Value,12,8),'.',':') + '.' + 
         RIGHT(@Value,6), 120) ValueAsDatetime2 

Результаты:

╔═════════════════════════╦═════════════════════════════╗ 
║  ValueAsDatetime  ║  ValueAsDatetime2  ║ 
╠═════════════════════════╬═════════════════════════════╣ 
║ 2007-12-19 11:57:17.367 ║ 2007-12-19 11:57:17.3667310 ║ 
╚═════════════════════════╩═════════════════════════════╝ 
+0

Спасибо так много он работает, но из 100000 я получаю только 75000 записей. Я надеюсь, что немногие из записей не совпадают. После 75000 записей дата может быть в странном формате. поэтому оставшиеся записи не заполнялись. Надеюсь, я думаю, что запись case case, независимо от того, какие записи находятся в другом формате, делает ее равной NULL и передает оставшиеся 75000 записей. – user2259252