我想在sql select语句中将秒转换为minute : seconds
格式。
目前我正在使用:
SELECT SEC_TO_TIME(duration) from messages;
它完美无缺,但它给了我这种时间格式:hh:mm:ss
但我需要mm:ss
是否可以使用sql查询将秒转换为mm:ss
格式?
答案 0 :(得分:4)
如果该值小于一小时,则执行:
SELECT RIGHT(SEC_TO_TIME(duration), 5) from messages;
如果你可能超过一个小时,那么做算术:
SELECT CONCAT_WS(':', FLOOR(SEC_TO_TIME(duration) / 60),
SEC_TO_TIME(duration) % 60)
答案 1 :(得分:0)
我最近有一个类似的项目,我需要将存储的秒数转换为m:ss
格式。无论金额多少,都需要至少一个代表分钟的数字和两个代表秒数的数字。小时占位符被禁止,因此分钟值可以接受超过59
并且还包含超过2位数。分钟值不得为零填充。
这就是我使用的:(SQLFiddle Demo)
CONCAT(FLOOR(seconds/60), ':', LPAD(MOD(seconds,60), 2, 0)) AS `m:ss`
又名
CONCAT(FLOOR(seconds/60), ':', LPAD(seconds%60, 2, 0)) AS `m:ss`
seconds | m:ss
-----------------
0 | 0:00
1 | 0:01
10 | 0:10
60 | 1:00
61 | 1:01
71 | 1:11
3599 | 59:59
3600 | 60:00
5999 | 99:59
6000 | 100:00
TIME_FORMAT(SEC_TO_TIME(seconds),'%i:%s')
不合适,因为项目规范不希望分钟部分为零填充。这是a good post relating to this technique。
TIME_FORMAT()或DATE_FORMAT()中没有单位数的分钟选项。
答案 2 :(得分:0)
如果您使用的是 MySQL 8.0+,则可以像这样使用 REGEXP_REPLACE 来实现类似于 mickmackusa 的答案的可变长度字符串:
REGEXP_REPLACE(SEC_TO_TIME(duration), '^(0|:)+', '')