Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как конвертировать в datetime  [new]
beaver06
Member

Откуда:
Сообщений: 681
Добрый день!
Подскажите, пожалуйста, как конвертировать следующее значение 20120212 200500 (YMD HMS) в 2012-02-12 20:05:00.000?
29 фев 12, 12:44    [12169086]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
declare @dt varchar(20) = '20120212 200500'

select convert( datetime, substring( @dt, 1, charindex( ' ', @dt ) ) ) 
     + convert( datetime, 
                substring( @dt, charindex( ' ', @dt ) + 1, 2 ) 
                + ':' + 
                substring( @dt, charindex( ' ', @dt ) + 3, 2 ) 
                + ':' + 
                right( @dt, 2 )
                , 112 )
29 фев 12, 13:01    [12169320]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
beaver06
Member

Откуда:
Сообщений: 681
Knyazev Alexey,
При таком значении '20120213 80716' не конвертируется...
29 фев 12, 13:04    [12169365]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT CAST(STUFF(STUFF('20120212 200500',14,0,':'),12,0,':')AS DATETIME);
29 фев 12, 13:11    [12169452]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
aleks2
Guest
declare @dt varchar(20) 

set @dt = '20120212 200500'

select cast(REVERSE(STUFF(STUFF(REVERSE(RTRIM(@dt)), 5, 0, ':'), 3, 0, ':')) as datetime)

set @dt = '20120213 80716'

select cast(REVERSE(STUFF(STUFF(REVERSE(RTRIM(@dt)), 5, 0, ':'), 3, 0, ':')) as datetime)
29 фев 12, 13:12    [12169465]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
beaver06
Member

Откуда:
Сообщений: 681
iap,
при некоторых значениях не конвертируется: напр. 20120213 80716
20120212 200500
20120213 80000
20120213 80716
20120213 80000
20120213 200500
29 фев 12, 13:13    [12169484]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
beaver06
Knyazev Alexey,
При таком значении '20120213 80716' не конвертируется...
А о чём мы ещё не знаем?
29 фев 12, 13:14    [12169497]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
beaver06
Member

Откуда:
Сообщений: 681
aleks2,

Спасибо большое... То что надо...
29 фев 12, 13:15    [12169520]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
beaver06
Member

Откуда:
Сообщений: 681
iap
beaver06
Knyazev Alexey,
При таком значении '20120213 80716' не конвертируется...
А о чём мы ещё не знаем?

Наверное о том, что часы бывают и до 12:00 :)
29 фев 12, 13:16    [12169533]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
СС123
Guest
beaver06
Наверное о том, что часы бывают и до 12:00 :)

Всех сразил наповал!
29 фев 12, 13:18    [12169558]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SELECT CAST(STUFF(STUFF(LEFT('20120213 80716',8)+REPLACE(RIGHT('20120213 80716',6),' ',' 0'),14,0,':'),12,0,':')AS DATETIME);
29 фев 12, 13:20    [12169574]     Ответить | Цитировать Сообщить модератору
 Re: Как конвертировать в datetime  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
beaver06
iap
пропущено...
А о чём мы ещё не знаем?

Наверное о том, что часы бывают и до 12:00 :)
Дык ведь и минуты бывают меньше 10.
Возможный формат в постановке задачи описан? Нет? Что же Вы хотите?
Обычно предполагается, что каждая часть времени - это два символа.
29 фев 12, 13:29    [12169705]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить