mysql time_format(不带前导零)

0md85ypi  于 2023-04-19  发布在  Mysql
关注(0)|答案(2)|浏览(93)

我用这个函数

SELECT TIME_FORMAT("01:02:03", "%H-%i-%s")

并得到结果01-02-03,而我不希望前导零是1-2-3
我使用php并考虑使用str_replace()trim(),但我不知道mysql是否可以做到这一点

01:02:03 > 1-2-3
00:02:03 > 0-2-3
00:00:03 > 0-0-3
polkgigr

polkgigr1#

我能想到的最简单的解决方案是将小时,分钟和秒分别连接为整数:

SELECT CONCAT_WS('-', HOUR('01:02:03'), MINUTE('01:02:03'), SECOND('01:02:03'))

参见demo

e5nqia27

e5nqia272#

这是对@forpas的回答的修改,如果你不想要小时或分钟为零的时候;所以是2-3而不是0-2-3
我希望我的时间是“1h 2 m3 s”格式,但不显示0值分组;所以用“2 m 3s”代替“0 h 2 m 3s”,用“3s”代替“0 h 0 m 3s”。
如果数据为时间格式(hh:mm:ss):

SELECT IF(TIME_TO_SEC(time_value) >= 3600, CONCAT(HOUR(time_value), '-', MINUTE(time_value), '-', SECOND(time_value)), IF(TIME_TO_SEC(time_value) >= 60, CONCAT(MINUTE(time_value), '-', SECOND(time_value)), SECOND(time_value))) AS formatted_time

如果您有以秒为单位的数据:

SELECT IF(seconds_value >= 3600, CONCAT(HOUR(SEC_TO_TIME(seconds_value)), '-', MINUTE(SEC_TO_TIME(seconds_value)), '-', SECOND(SEC_TO_TIME(seconds_value))), IF(seconds_value >= 60, CONCAT(MINUTE(SEC_TO_TIME(seconds_value)), '-', SECOND(SEC_TO_TIME(seconds_value))), SECOND(SEC_TO_TIME(seconds_value)))) AS formatted_time

相关问题