gpt4 book ai didi

MySQL SEC_TO_TIME 给出 hh :mm:ss. 000000

转载 作者:行者123 更新时间:2023-11-29 00:14:59 27 4
gpt4 key购买 nike

正如标题中所述,我想知道为什么 MySQL 的 SEC_TO_TIME-Function 在最后给出了零。

引用不应该发生的文档(http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_sec-to-time)(我使用的是 MySQL 5.0.11)。

知道为什么会出现这个 Zeros 以及如何摆脱它们吗?显示毫秒数太多了。

因为零不会破坏 MySQL 的日期函数,它更像是一个“我不喜欢那样”-问题而不是真正的问题(至少到现在为止^^)

//编辑:我刚刚发现零不是来自 SEC_TO_TIME,而是来自 FROM_UNIXTIME() 函数。感谢@Abhik Chakraborty 征求意见!

//EDIT2:我使用 FROM_UNIXTIME(last_try, '%Y-%m-%d %H:%i:%s') 去除零。但是当我执行 TIME(FROM_UNIXTIME(last_try, '%Y-%m-%d %H:%i:%s')) 时,零又回来了。为什么??

似乎每个函数都会加回零。在简单的整数值上使用 SEC_TO_TIME 也会给出零...

这是我使用的整个查询:

SELECT
SEC_TO_TIME(FLOOR(TIME_TO_SEC((TIME(FROM_UNIXTIME(`last_try`))))/1800)*1800)
FROM `last48h`

查询读取时间戳,只获取时间,将其转换为秒,将秒分成半小时(/1800 给出 0 < x < 48)向下舍入并转换回时间

最佳答案

SEC_TO_TIME 为其结果生成一个 TIME 数据类型。您可以根据需要使用 DATE_FORMAT 对其进行格式化。

如果您确实需要亚秒级时间分辨率,则需要升级到 5.6.4 或更高版本。

当您直接选择任何一种 TIME 数据类型来显示时,您将获得一个默认的 TIME 到字符串的转换操作。在某些版本的 MySQL 中,默认的 TIME-to-string 转换会产生一个以 hh:mm:ss+zz00 结尾的字符串。 +zz00 是时区指示器,通常显示为 +0000。有没有可能这就是你所看到的?

尝试使用 SEC_TO_TIME() 处理 UNIX_TIMESTAMP() 样式的秒数没有意义。截至 2014 年年中,当前 unix 时间戳值超过 1.39 千兆秒。 TIME 数据类型用于诸如耗时之类的东西,限制在 839 小时以下(3 兆秒,精确到 3020399 秒),并且静默截断它们的值。

例如,这是对 SEC_TO_TIME 的一个很好的使用:

   SELECT SEC_TO_TIME(end_timestamp - start_timestamp) AS duration

编辑奇怪的是,这个查询

SELECT
SEC_TO_TIME(FLOOR(TIME_TO_SEC((TIME(FROM_UNIXTIME(UNIX_TIMESTAMP()))))/1800)*1800) AS a,
FLOOR(TIME_TO_SEC((TIME(FROM_UNIXTIME(UNIX_TIMESTAMP()))))/1800)*1800 AS b,
TIME_TO_SEC((TIME(FROM_UNIXTIME(UNIX_TIMESTAMP()))))/1800 AS c,
FROM_UNIXTIME(UNIX_TIMESTAMP()) AS d,
FROM_UNIXTIME(UNIX_TIMESTAMP() - UNIX_TIMESTAMP() % 1800) as e

不会通过我使用的 phpmyadmin 实例显示任何 0000 内容。

顺便说一句,大多数将时间四舍五入到最接近的间隔(在您的情况下是半小时)的人更喜欢使用模数和减法;与您的方法相比,它对隐式数字类型转换的依赖程度较低。

 SELECT TIME(FROM_UNIXTIME(last_try - last_try%1800))

做你问题中的查询。

关于MySQL SEC_TO_TIME 给出 hh :mm:ss. 000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23310435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com