2017-02-14 2 views
0

Я пытаюсь объединить две разные таблицы, состоящие из старых и новых билетов. Для того, чтобы все значения в целях последовательной, мне нужно, чтобы изменить значение этого типа:TSQL: Как конвертировать «44 дня, 5:07:01» в «44: 5: 07: 01»?

"44 дней, 5:07:01"

To:

" 44: 5: 07: 01 "

Они оба хранятся в виде варчаров. В основном это разница между двумя датами.

Кроме того, когда разница между датами не включает в себя «дни», то разница отображаемые в данный момент, как

«5:07:01»

Что мне нужно, чтобы преобразовать в

"00: 05: 07: 01"

Есть идеи, как это сделать?

ответ

1

Это решает эти две проблемы:

select (case when val like '% days, %' 
      then left(val, charindex(' ', val)) + ':' + ltrim(right(val, 8)) 
      when val like '_:%' 
      then '00:0' + val 
      else '00:' + val 
     end) 

Как и многие строки форматирования вещи в SQL Server, это довольно специальный. Код не является особенно гибким, но он решает проблему для форматов в вашем вопросе.

+0

Эй Гордон - Является ли синтаксис правильно? Получение ошибки на третьей строчке выше. Неправильный синтаксис рядом с ключевым словом «like». – 90abyss

1

Другой вариант

Declare @YourTable table (YourCol varchar(50)) 
Insert Into @YourTable values 
('44 days, 5:07:01'), 
('4 days, 5:07:01'), 
('5:07:01') 

Select right(IIF(charindex(' d',YourCol)=0,'00',rtrim(left('0'+YourCol,3))),2) 
     +':'+right('0'+replace(' '+YourCol,' ','0'),8) 
From @YourTable 

Возвращает

(No column name) 
44:05:07:01 
04:05:07:01 
00:05:07:01 
Смежные вопросы