2017-02-14 1 views
0

나는 더 오래된 티켓과 새로운 티켓으로 구성된 두 개의 다른 테이블을 결합하려고합니다. "TSQL : "44 일, 5:07:01"을 (를) "44 : 5 : 07 : 01"로 변환하는 방법?

:

에"5시 7분 1초, 사십사일 "

: 뷰에있는 모든 값의 일관성을 위해,이 유형의 값을 변경해야 44 : 5 : 07 : 01 "

이들은 모두 varchar로 저장됩니다. 그들은 기본적으로 두 날짜의 차이가 있습니다. 날짜 사이의 차이는 그 차이가

으로 현재 표시됩니다 "일"에 포함되지 않습니다 또한

,

"5시 7분 1초"나는

로 변환 할 필요가

"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 
관련 문제