正如在标题中所说的,我想知道为什么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:
SELECT
SEC_TO_TIME(FLOOR(TIME_TO_SEC((TIME(FROM_UNIXTIME(`last_try`))))/1800)*1800)
FROM `last48h`查询读取时间戳,只获取时间,将其转换为秒,将秒分解为半小时(/1800给出0
发布于 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的一个很好的使用:
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))做你问题中的查询所做的。
发布于 2015-06-18 22:40:45
我对“SEC_TO_TIME”函数也有同样的问题。
我忽略了这样一个事实:我将时间戳存储为VARCHAR。
我将数据类型从VARCHAR更改为BIGINT,它正在按预期设置输出值(hh:mm:ss)。
发布于 2018-10-22 12:43:13
尝试在%k说明符中使用格式化,它应该会有所帮助。
https://stackoverflow.com/questions/23310435
复制相似问题