首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL SEC_TO_TIME给hh:mm:ss.000000

MySQL SEC_TO_TIME给hh:mm:ss.000000
EN

Stack Overflow用户
提问于 2014-04-26 11:49:29
回答 3查看 3.9K关注 0票数 1

正如在标题中所说的,我想知道为什么SEC_TO_TIME-Function of MySQL在结尾给了我这个零。

引用不应该发生的docu (证券交易委员会) (我使用的是MySQL 5.0.11)。

你知不知道为什么会出现这个“零”号,以及如何摆脱它们?用于显示毫秒的零点。

如果零不会破坏MySQL的日期-funcions,它更多的是一个“我不喜欢那个”的-Question,而不是一个真正的问题(至少到目前为止^^)。

//编辑:我刚刚发现零不是来自SEC_TO_TIME,而是来自FROM_UNIXTIME()-Function。Thx到@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对一个简单的整数值也会给出零.

下面是使用以下方法的整个查询iam:

代码语言:javascript
复制
SELECT
    SEC_TO_TIME(FLOOR(TIME_TO_SEC((TIME(FROM_UNIXTIME(`last_try`))))/1800)*1800)
FROM `last48h`

查询读取时间戳,只获取时间,将其转换为秒,将秒分解为半小时(/1800给出0

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-26 11:56:14

SEC_TO_TIME为其结果生成时间数据类型。您可以使用DATE_FORMAT按您的意愿设置该格式。

如果实际需要次秒级分辨率,则需要移到5.6.4或更高版本。

当您直接选择要显示的任何类型的时间数据类型时,您将得到默认的时间到字符串转换操作。在某些代MySQL中,默认的时间到字符串转换会产生以hh:mm:ss+zz00结尾的字符串。+zz00是一个时区指示器,通常以+0000的形式显示。你看到的可能就是这个吗?

尝试使用UNIX_TIMESTAMP()处理UNIX_TIMESTAMP()样式的秒数是没有意义的。截至2014年年中,当前unix时间戳值超过1.39千兆秒。时间数据类型用于诸如经过时间之类的东西,限制在839小时以内(3兆秒,精确3020399秒),悄悄地截断的值。

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

代码语言:javascript
复制
   SELECT SEC_TO_TIME(end_timestamp - start_timestamp) AS duration

非常奇怪地编辑,这个查询

代码语言:javascript
复制
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内容。

顺便说一句,大多数时间间隔最近的人(在你的例子中是半小时)更喜欢使用模和减法;它比你的方法更少地依赖于隐式的数值类型转换。

代码语言:javascript
复制
 SELECT TIME(FROM_UNIXTIME(last_try - last_try%1800))

做你问题中的查询所做的。

票数 1
EN

Stack Overflow用户

发布于 2015-06-18 22:40:45

我对“SEC_TO_TIME”函数也有同样的问题。

我忽略了这样一个事实:我将时间戳存储为VARCHAR。

我将数据类型从VARCHAR更改为BIGINT,它正在按预期设置输出值(hh:mm:ss)。

票数 0
EN

Stack Overflow用户

发布于 2018-10-22 12:43:13

尝试在%k说明符中使用格式化,它应该会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23310435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档