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

Откуда:
Сообщений: 12
Коллеги, столкнулся с проблемной ситуацией. Необходимо получить datetime при наличии следующих полей:

mydate - smalldatetime
mytime - varchar(5)

Проблема состоит в том, что в mytime записывается время в произвольном формате и столбец может иметь значения:
{'00.00', '00,00', '00.-1', '08/','' }

Следующий запрос выполняет преобразование и сложение, учитывая эти ситуации:

select CONVERT(datetime, cast(cast(mydate as int) as datetime) + ' ' + 
cast(replace(replace(replace(mytime, '-', ':'),'.',':'), ',', ':') + ':00' as datetime)) 
from vlad.dbo.basaunion where mytime not in  ( '00.-1') and len(mytime) = 5


Можно ли его преобразовать в нечто более быстрое, избежав череды cast'ов?
6 сен 12, 14:50    [13124265]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar(5) во время  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
Denis.Dacko
Можно ли его преобразовать в нечто более быстрое, избежав череды cast'ов?
Да легко. Сделайте поле mytime c типом time.
6 сен 12, 15:15    [13124457]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar(5) во время  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
Denis.Dacko
Коллеги, столкнулся с проблемной ситуацией. Необходимо получить datetime при наличии следующих полей:

mydate - smalldatetime
mytime - varchar(5)

Проблема состоит в том, что в mytime записывается время в произвольном формате и столбец может иметь значения:
{'00.00', '00,00', '00.-1', '08/','' }

Следующий запрос выполняет преобразование и сложение, учитывая эти ситуации:

select CONVERT(datetime, cast(cast(mydate as int) as datetime) + ' ' + 
cast(replace(replace(replace(mytime, '-', ':'),'.',':'), ',', ':') + ':00' as datetime)) 
from vlad.dbo.basaunion where mytime not in  ( '00.-1') and len(mytime) = 5


Можно ли его преобразовать в нечто более быстрое, избежав череды cast'ов?
Если Вы в состоянии привести свой mytime к виду 'hh:mm:ss.nnn', то желаемый результат получается просто:
CAST(CONVERT(CHAR(11),mydate,126)+[приведённый к правильному виду mytime] AS DATETIME)
6 сен 12, 15:36    [13124642]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование varchar(5) во время  [new]
Denis.Dacko
Member

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

Спасибо
6 сен 12, 16:11    [13124961]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить