2015-09-24 4 views
0

Это мой запросПреобразовать даты и времени, который находится в VARCHAR для DateTime

select cast('2014/07/30 13:57:38.893000' as datetime) 

Выше запроса возвращает сообщение об ошибке:

Msg 241, Level 16, State 1, Line 1
преобразования не удалось при преобразовании даты и/или времени из символьной строки.

Может ли кто-нибудь мне помочь?

ответ

1

Точность указана в строке могут быть обработаны с помощью Datetime2, который почему Datetime2 был добавлен в SQL Server 2008:

select cast('2014/07/30 13:57:38.893000' as datetime2) 

С SQL Server Transact SQL Documentation:

Длина символа:
19 позиции минимум (YYYY-MM-DD hh:mm:ss) до 27 максимум (YYYY-MM-DD hh:mm:ss.0000000)

+0

Спасибо. Работает –

0

Это слишком большая точность анализатора.

Просто попробуйте так:

select cast('2014/07/30 13:57:38.893' as datetime) 
+0

да, выберите литая ('2014/07/30 13: 57: 38.893 'в качестве даты и времени) –

+0

select cast (' 2014/07/30 13: 57: 38.893 'в качестве даты) Он работает, но в нашей базе данных все даты хранятся в формате выше, например 2014/07/30 13:57: 38.893000 так Что такое решение для преобразования этого значения в datetime –

+0

Попробуйте либо решение @ ptilton, либо решение Rahul Tripathi. Это зависит от того, хотите ли вы сохранить точность или нет. – David

0

Попробуйте это:

declare @s varchar(30) 
set @s = '2014/07/30 13:57:38.893000' 
select cast(LEFT(@s,LEN(@s)-3) as datetime) 

SQL FIDDLE DEMO

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