我有这个javascript代码可以正常工作:
function timeup(s) {
var d, h, m, s;
m = Math.floor(s / 60);
s = s % 60;
h = Math.floor(m / 60);
m = m % 60;
d = Math.floor(h / 24);
h = h % 24;
m = m > 9 ? m : "0"+m;
h = h > 9 ? h : "0"+h;
s = s > 9 ? s : "0"+s;
if (d > 0) {
d = d+" days ";
} else {
d = "";
}
return d+h+":"+m+":"+s;
}
所以我需要相同的功能,但在MySQL中(因为我做SQL查询,不想在客户端使用javascript转换)
所以我需要在MySQL秒内转换以获得相同的输出:
timeup(600000) => 6 days 22:40:00
timeup(60000) => 16:40:00
timeup(6000) => 01:40:00
timeup(600) => 00:10:00
timeup(60) => 00:01:00
timeup(60) => 00:01:00
timeup(6) => 00:00:06
因此,如果低于一天的秒数显示HH:MM:SS如果当天的秒数显示X天HH:MM:SS
我正在尝试使用CONCAT& TIMESTAMPDIFF,但我想也许它应该去,如果那时比较24h以下的日子或磨碎机显示自定义字符串X天...任何帮助欢迎。
答案 0 :(得分:1)
我对此进行了测试,似乎完成了这项工作:
DROP FUNCTION IF EXISTS GET_HOUR_MINUTES;
DELIMITER $$
CREATE FUNCTION GET_HOUR_MINUTES(seconds INT)
RETURNS VARCHAR(16)
BEGIN
RETURN CONCAT(LPAD(FLOOR(HOUR(SEC_TO_TIME(seconds)) / 24), 2, 0), ' days ',TIME_FORMAT(SEC_TO_TIME(seconds % (24 * 3600)), '%H:%i:%s'));
END;
$$
DELIMITER ;
像这样测试:
SELECT GET_HOUR_MINUTES(600001);
返回
'06 days 22:40:01'
至少在MySQL Workbench中,似乎想要在运行之前选择正在使用的数据库。它将函数保存在数据库中,也就是说,您可以在左侧的列中看到它,包括表,视图,存储过程和函数。
答案 1 :(得分:0)
我现在还有另外一个问题,这个上面的功能只能在几秒钟内工作..但我忘记在第一个问题中询问我在数据库中存储的数字:
uptime => 1507977507423
我需要秒数并显示NOW()
时间
所以例如,如果我在数据库中有正常运行时间,那么公式将是:NOW() - 正常运行时间,我尝试使用此但我得到奇怪的输出,如34天838:59:59,这是不正确的:
SELECT
CONCAT(LPAD(FLOOR(HOUR(SEC_TO_TIME(UNIX_TIMESTAMP(NOW())-SUBSTRING(uptime, 1, length(uptime) - 2))) / 24), 2, 0), ' days ',TIME_FORMAT(SEC_TO_TIME(UNIX_TIMESTAMP(NOW())-SUBSTRING(uptime, 1, length(uptime) - 2) % (24 * 3600)), '%H:%i:%s')) AS nice_date
FROM streams
WHERE id=1;
我明白了:
+-------------------+
| nice_date |
+-------------------+
| 34 days 838:59:59 |
+-------------------+