TSQL:如何转换" 44天,5:07:01"到" 44:5:07:01"?

时间:2017-02-14 23:48:08

标签: sql sql-server tsql

我试图合并两个不同的表,包括旧票和新票。要使视图中的所有值保持一致,我需要更改此类型的值:

  

" 44天,5:07:01"

要:

  

" 44:5:07:01"

它们都存储为varchars。它们基本上是两个日期之间的差异。

此外,当日期之间的差异不包括"天"然后差异显示为

  

" 5:07:01"

我需要转换为

  

" 00:05:07:01"

知道该怎么做吗?

2 个答案:

答案 0 :(得分: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中的许多字符串格式化一样,这是非常特别的。代码不是特别灵活,但它确实解决了问题格式的问题。

答案 1 :(得分: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