SQL将秒转换为日:小时:分:秒

时间:2011-01-14 19:04:15

标签: datetime string db2

主题说明了一切。我试图通过一个函数来做一些魔术,它将第二个整数变成一个字符串“DD:HH:MM:SS”。

剪断

输入:278543
输出:“3D 5H 22M 23S”

我想做的事情,如果可能的话,更优雅的是填充数字(以便5M显示为05M)并右对齐它们以便“3D 5H 22M 23S”代替“3D 5H 22M 23S”。 / p>

编辑:最新剪辑似乎有效。我希望能让它更漂亮,但这绝对有效,据我所知:

CREATE FUNCTION DHMS(secondsElapsed INT)
RETURNS Char(20)
LANGUAGE SQL
NO EXTERNAL ACTION
DETERMINISTIC

BEGIN
    DECLARE Dy Integer;
    DECLARE Hr Integer;
    DECLARE Mn Integer;
    DECLARE Sc Integer;

    SET Dy = Cast(     secondsElapsed / 86400         as Int);
    SET Hr = Cast(MOD( secondsElapsed, 86400 ) / 3600 as Int);
    SET Mn = Cast(MOD( secondsElapsed, 3600 ) / 60    as Int);
    SET Sc = Cast(MOD( secondsElapsed, 60 )           as Int); 

     RETURN REPEAT(' ',6-LENGTH(RTRIM(CAST(Dy AS CHAR(6))))) || Dy || 'D ' 
         || REPEAT('0',2-LENGTH(RTRIM(CAST(Hr AS CHAR(6))))) || Hr || 'H ' 
         || REPEAT('0',2-LENGTH(RTRIM(CAST(Mn AS CHAR(6))))) || Mn || 'M '
         || REPEAT('0',2-LENGTH(RTRIM(CAST(Sc AS CHAR(6))))) || Sc || 'S';
END

2 个答案:

答案 0 :(得分:2)

你使用LPAD()进入了正确的轨道,因为它可以填充零或任何其他字符串。 CHAR(15)不足以按您希望的方式格式化输出,并且仍然允许五个位置的天数,即您在代码中指定的长度。

CREATE OR REPLACE FUNCTION DHMS(secondsElapsed INT)
RETURNS Char(18)
LANGUAGE SQL
NO EXTERNAL ACTION
DETERMINISTIC

RETURN LPAD( secondsElapsed / 86400 , 5 ) || 'D ' 
  || LPAD( MOD( secondsElapsed, 86400 ) / 3600, 2, '0') || 'H ' 
  || LPAD( MOD( secondsElapsed, 3600 ) / 60, 2, '0' ) || 'M '
  || LPAD( MOD( secondsElapsed, 60 ), 2, '0' ) || 'S'
;

答案 1 :(得分:1)

声明@seconds int 设置@seconds = 900000000 select cast(@ seconds / 86400 as varchar(50))+':'+ Convert(VarChar,DateAdd(S,@ second,0),108)