在SQL列中的HH:MM:SS上添加缺少的ZERO

时间:2014-06-03 09:16:33

标签: sql-server database tsql datetime

这是我需要的T-SQL列格式 HH:MM:SS

示例:

SELECT CONVERT(varchar,GETDATE(),108) - 11:06:03

我有以下值:从MyTable中选择持续时间

  

2时13分00秒

     

11:02

     

0:43

这需要是这样的:

  

2时十三分00秒

     

0点11分02秒

     

0点00分43秒

如何在T-SQL中完成?

2 个答案:

答案 0 :(得分:2)

Use Convert,然后施放 转型。这里的特性隐藏在省略的小时字符串中,而sql server假设秒省略。

Select 
   CONVERT(time(0), 
      case when len(duration) > 5 then duration else '00:' + duration end, 108)
from MyTable

示例:

SELECT CONVERT(time(0), 
  case when len('2:13:00') > 5 then '2:13:00' else '00:' + '2:13:00' end ,108)
SELECT CONVERT(time(0), 
  case when len('11:02') > 5 then '11:02' else '00:' + '11:02' end ,108)
SELECT CONVERT(time(0), 
   case when len('0:43') > 5 then '0:43' else '00:' + '0:43' end ,108)
--------------
02:13:00
00:11:02
00:00:43
  • Update1:​​优化了@Mikael Eriksson提示的时间(0)答案

  • Update2:关于example2要求的修改后的解决方案

答案 1 :(得分:1)

这最终为我做到了......

SELECT  RIGHT('000' + CASE WHEN LEN(Duration) > 5
                       THEN LEFT(duration, CHARINDEX(':', duration) - 1)
                       ELSE 0 -- Hours
                  END, 3) + ':' + 
    RIGHT('00'  + CASE WHEN LEN(Duration) > 5
                       THEN SUBSTRING(duration
                                    ,CHARINDEX(':',duration) + 1
                                    ,CHARINDEX(':',duration
                                        ,CHARINDEX(':',duration) + 1) - 1- CHARINDEX(':',duration))
                            ELSE LEFT(duration,CHARINDEX(':',duration) - 1)END, 2) + ':' + -- Minutes
        RIGHT('00'+ RIGHT(duration, 2), 2) -- Seconds
        NewDuration

   FROM    MyTable