SQL-конвертировать varchar(8) в формат времени

время сохраняется в формате varchar (8), например: 09241324, и я хочу преобразовать его в формат времени. Я могу избавиться от последнего nn, чтобы hh:mm:ss работало. Я пытался использовать cast/convert, но выдает ошибку:

Ошибка преобразования при преобразовании даты и/или времени из строки символов.

Кто-нибудь может мне помочь?


person Geetanjali Sachdeva    schedule 05.11.2015    source источник
comment
Какая у вас СУБД? Функции времени/даты различаются в зависимости от реализации.   -  person PM 77-1    schedule 05.11.2015
comment
Это sql сервер 2008 R2.   -  person Geetanjali Sachdeva    schedule 05.11.2015
comment
Если это вообще возможно, вы должны изменить тип данных таблицы и сохранить информацию о времени в типе данных time. Хранение этого материала в форме символа — кошмар.   -  person Sean Lange    schedule 05.11.2015


Ответы (2)


Будет ли это работать?

convert(time, stuff(stuff(stuff(dt, 3, 0, ':'), 6, 0, ':'), 9, 0, '.'))

cast обычно предпочтительнее convert, но я не сразу понял, нужно ли указывать код формата.

Без миллисекунд аналогично:

convert(time, stuff(stuff(stuff(dt, 3, 0, ':'), 6, 0, ':'), 9, 2, '.00'))
person shawnt00    schedule 05.11.2015
comment
Ваш STUFF намного чище, чем мой SUBSTRING - person Matt; 05.11.2015
comment
Хотя мне всегда приходится искать аргументы в stuff :) - person shawnt00; 05.11.2015
comment
Спасибо! это работает, но мне просто нужны первые 6 цифр, такие как чч: мм: сс, а не наносекунды. Есть ли способ их удалить? - person Geetanjali Sachdeva; 05.11.2015
comment
@GeetanjaliSachdeva используйте time(0) для хранения только чч:мм:сс вместо time - person Eric; 06.11.2015

Вставьте части форматирования времени ( двоеточие : и десятичное число . ) и CAST как TIME:

DECLARE @string VARCHAR(10)
SET @string = '09241324'
SELECT CAST(
    SUBSTRING(@string,1,2) + ':' +
    SUBSTRING(@string,3,2) + ':' +
    SUBSTRING(@string,5,2) + '.' +
    SUBSTRING(@string,7,2) AS TIME)
person Matt    schedule 05.11.2015