代码之家  ›  专栏  ›  技术社区  ›  RRUZ

将军事时间转换为字符串表示

  •  1
  • RRUZ  · 技术社区  · 14 年前

    int (称为HourMil)把时间存储在 military format . 我需要将这个值转换成格式化的字符串(HH:MM)

    HourMil  = 710 -> must be 07:10
    HourMil  = 1305 -> must be 13:05
    

    实际上,我正在使用这段代码(工作正常)将列HourMil转换为字符串表示。

    SELECT SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),1,2)+':'+SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),3,2) FROM MYTABLE
    

    但我认为这个代码可以改进。

    3 回复  |  直到 3 年前
        1
  •  1
  •   Arnis Lapsa    14 年前

    通过创建日期,然后格式化:

    SELECT SUBSTRING(CONVERT(nvarchar, DATEADD
       (hh, HourMil / 100, DATEADD(mi, HourMil % 100, '1900-01-01')), 8), 0, 6)
    
        2
  •  0
  •   Svisstack    14 年前

    H = HourMil / 100;
    M = HourMil - ( HourMil / 100 ) * 100;
    

    工作示例:

    H = 710 / 100 = 7
    M = 710 - (710 / 100) * 100 = 10
    
    H = 1305 / 100 = 13
    M = 1305 - (1305 / 100) * 100 = 5
    

    /* 操作员 必须

    那么您将:

    CONCAT(CAST(H AS VARCHAR(8)), ':', CAST(M AS VARCHAR(8)));
    

    CONCAT(CAST((HourMil / 100) AS VARCHAR(8)), ':', CAST((HourMil - ( HourMil / 100 ) * 100) AS VARCHAR(8)));
    
        3
  •  0
  •   Madhivanan    14 年前

    这是另一种方法,也是最短的方法

    select stuff(right('0'+ltrim(hourmail),4),3,0,':') from
    (
    select 710 as hourmail union all
    select 1305
    ) as t