FROM_UNIXTIME又多了一小时

时间:2017-09-27 08:28:14

标签: mysql

我有一个非常简单的需求: 将一些毫秒值转换为" ##:##:##" (小时/分钟/秒)格式。

似乎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"

1 个答案:

答案 0 :(得分:0)

我不得不选择一个丑陋但有效的“解决方案”:

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

C14L的评论应该是更好的选择,但它只会让事情变得更糟:/

如果您有可靠且易于使用的东西,请发布答案。
不得不手动进行这样的计算对我来说没有意义。