我有一个非常简单的需求: 将一些毫秒值转换为" ##:##:##" (小时/分钟/秒)格式。
似乎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"
答案 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的评论应该是更好的选择,但它只会让事情变得更糟:/
如果您有可靠且易于使用的东西,请发布答案。
不得不手动进行这样的计算对我来说没有意义。