主题说明了一切。我试图通过一个函数来做一些魔术,它将第二个整数变成一个字符串“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
答案 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)