【发布时间】:2018-03-08 15:39:15
【问题描述】:
我有一个非常简单的需求: 将一些毫秒值转换为“##:##:##”(小时/分钟/秒)格式。
看来 FROM_UNIXTIME 可以完成这项工作,所以我使用了它,但是...
SELECT
FROM_UNIXTIME(42, "%H:%i:%s") AS pony
,FROM_UNIXTIME(3702, "%H:%i:%s") AS unicorn
返回
pony unicorn
01:00:42 02:01:42
由于此函数中没有设置时区,我不知道如何删除这个额外的 (wtf) 小时。
删除 3600 秒会产生一个负值,即输出 NULL
我想我应该使用另一种方式,但如果我必须使用六个转换,我也可以手动进行......没有什么简单高效?
我没有确切的 MySQL 版本,但无论如何我需要最低限度的可移植性。可以使用的东西,比如 MySQL 5.x 我需要手动计算吗?
编辑: 选择了一个丑陋但有效的“解决方案”:
CONCAT(
LPAD(FLOOR((my_column/1000) / 3600), 2, '0'), ':',
LPAD(FLOOR(((my_column/1000) % 3600) / 60), 2, '0'), ':',
LPAD(FLOOR((my_column/1000) % 60), 2, '0')) AS time
具有所需格式的输出。 例如“03:12:04”或“123:00:44”
【问题讨论】:
-
我猜那是您当地的时区。也许使用
SET time_zone='UTC';会有所帮助,请参阅stackoverflow.com/q/18276768/5520354 -
@C14L 是的,我确定这是因为那些 ******* 夏令时(我是 FR),但现在,尝试仅设置时区...变成了我所有的结果为 null。此外,“UTC”似乎不是有效值(产生错误),必须使用“+00:00”。它应该解释空值吗?
标签: mysql