【问题标题】:Add missing ZERO on HH:MM:SS in SQL column在 SQL 列中的 HH:MM:SS 上添加缺少的零
【发布时间】:2014-06-03 09:16:32
【问题描述】:

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

例子:

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

我有这些值:(从 MyTable 中选择持续时间)

2:13:00

11:02

0:43

应该是这样的:

02:13:00

00:11:02

00:00:43

如何在 T-SQL 中做到这一点?

【问题讨论】:

    标签: sql-server database tsql datetime


    【解决方案1】:

    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
    
    • 更新 1:根据@Mikael Eriksson 提示优化了 time(0) 的答案

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

    【讨论】:

    • 完美,感谢更新!这就是我想要的!不知道为什么有 2 个人对这个问题投了反对票!
    • 另一个问题....如果我需要 HH 值大于 23 怎么办?比如285:28:02呢?总共是 285 小时 28 分 2 秒?
    【解决方案2】:

    这最后帮我做了.....

    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
    

    【讨论】:

      猜你喜欢
      • 2018-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      相关资源
      最近更新 更多