我想在sql select语句中将秒转换为
minute : seconds
格式。
目前我正在使用:
SELECT SEC_TO_TIME(duration) from messages;
它工作完美,但它给了我这种时间格式:
hh:mm:ss
但我需要mm:ss
是否可以使用sql查询将秒转换为
mm:ss
格式?
如果该值小于一小时,则只需执行以下操作:
SELECT RIGHT(SEC_TO_TIME(duration), 5) from messages;
如果你可能会花一个多小时,那么做算术:
SELECT CONCAT_WS(':', FLOOR(SEC_TO_TIME(duration) / 60),
SEC_TO_TIME(duration) % 60)
我最近有一个类似的项目,我需要将存储的秒数转换为
m:ss
格式。 无论多少,至少需要有一位数字代表分钟,两位数字代表秒。 禁止使用小时占位符,因此分钟值可以超出 59
并且包含超过 2 位数字。 分钟值不得用零填充。
这就是我使用的:(SQLFiddle 演示)
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')
不合适,因为项目规范不希望分钟部分用零填充。 这是一篇与此技术相关的好帖子。
TIME_FORMAT() 或 DATE_FORMAT() 中没有单位数分钟选项。
如果您使用 MySQL 8.0+,您可以像这样使用 REGEXP_REPLACE 来实现类似于 micmackusa 的答案的可变长度字符串:
REGEXP_REPLACE(SEC_TO_TIME(duration), '^(0|:)+', '')
select DATE_FORMAT(SEC_TO_TIME(duration), '%i:%s') from messages;