MySQL:如何将秒转换为 mm:ss 格式?

问题描述 投票:0回答:4

我想在sql select语句中将秒转换为

minute : seconds
格式。

目前我正在使用:

SELECT SEC_TO_TIME(duration) from messages; 

它工作完美,但它给了我这种时间格式:

hh:mm:ss
但我需要
mm:ss

是否可以使用sql查询将秒转换为

mm:ss
格式?

mysql sql format
4个回答
8
投票

如果该值小于一小时,则只需执行以下操作:

SELECT RIGHT(SEC_TO_TIME(duration), 5) from messages; 

如果你可能会花一个多小时,那么做算术:

SELECT CONCAT_WS(':', FLOOR(SEC_TO_TIME(duration) / 60),
                 SEC_TO_TIME(duration) % 60)

3
投票

我最近有一个类似的项目,我需要将存储的秒数转换为

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() 中没有单位数分钟选项。


1
投票

如果您使用 MySQL 8.0+,您可以像这样使用 REGEXP_REPLACE 来实现类似于 micmackusa 的答案的可变长度字符串:

REGEXP_REPLACE(SEC_TO_TIME(duration), '^(0|:)+', '')

0
投票
select DATE_FORMAT(SEC_TO_TIME(duration), '%i:%s') from messages;
© www.soinside.com 2019 - 2024. All rights reserved.