Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将整数转换为日期时间(dd:hh:mm:ss)_Mysql - Fatal编程技术网

Mysql 将整数转换为日期时间(dd:hh:mm:ss)

Mysql 将整数转换为日期时间(dd:hh:mm:ss),mysql,Mysql,“closeTime”和“addTime”具有日期时间(YYYY-MM-DD HH:MI:SS)格式。结果是: SELECT AVG (closeTime - createTime) FROM Deals WHERE dealid = 123 我应该使用哪个函数将此值转换为DATETIME 105030215.0000 我正在寻找的结果(我在Excel中计算): 在MySQL中减去DATETIMEs似乎不会给出它们之间的秒差。使用您的两个示例日期2016-04-12 13:06和2016-0

“closeTime”和“addTime”具有日期时间(YYYY-MM-DD HH:MI:SS)格式。结果是:

SELECT AVG (closeTime - createTime)
FROM Deals
WHERE dealid = 123
我应该使用哪个函数将此值转换为DATETIME

105030215.0000
我正在寻找的结果(我在Excel中计算):


在MySQL中减去
DATETIME
s似乎不会给出它们之间的秒差。使用您的两个示例日期2016-04-12 13:06和2016-05-12 16:08(假设您问题中的2017是一个拼写错误),减去它们返回1000030200,而正确答案是2602920。这是一个38.4倍和一点的系数

返回秒差的MySQL函数是
TIMESTAMPDIFF
,实际上,
选择TIMESTAMPDIFF(SECOND,'2016-04-12 13:06','2016-05-12 16:08')
返回正确的秒数

现在我们需要做的就是把它转换成你的格式。MySQL有一个内置函数
秒到秒时间
,它可以做到这一点,但不幸的是,它的工作时间不超过839小时,并且没有单独列出日期。我们可以通过将天数与计算的其余部分分开计算,并在从差值中减去天数后,对剩余部分使用
SEC_TO_TIME

29:03:02:15 (DD:HH:MM:SS)
这似乎是正确的答案。虽然您希望的输出是
29:03:02:15
,但4月份有30天,输入中根本没有秒

当您使用聚合函数来确定秒数时,我们将无法将以天为单位的值与以秒为单位的值分开选择(否则,我们将得到平均天数,然后是平均秒数的一部分),因此您必须将其重写为

SELECT CONCAT(
    TIMESTAMPDIFF(DAY, '2016-04-12 13:06', '2016-05-12 16:08'), ':',
    SEC_TO_TIME(TIMESTAMPDIFF(SECOND, '2016-04-12 13:06', '2016-05-12 16:08') % 86400));
-- 30:03:02:00 (DD:HH:MM:SS)
这现在包括了几分之一秒,因为平均差可能不是整数秒。要排除它们,请使用
FLOOR
ROUND

SELECT CONCAT(
    FLOOR(AVG(TIMESTAMPDIFF(SECOND, createTime, closeTime)) / 86400), ':',
    SEC_TO_TIME(AVG(TIMESTAMPDIFF(SECOND, createTime, closeTime)) % 86400))
FROM deals WHERE dealid = 123;
-- 30:03:02:00.0000

在MySQL中减去
DATETIME
s似乎不会给出它们之间的秒差。使用您的两个示例日期2016-04-12 13:06和2016-05-12 16:08(假设您问题中的2017是一个拼写错误),减去它们返回1000030200,而正确答案是2602920。这是一个38.4倍和一点的系数

返回秒差的MySQL函数是
TIMESTAMPDIFF
,实际上,
选择TIMESTAMPDIFF(SECOND,'2016-04-12 13:06','2016-05-12 16:08')
返回正确的秒数

现在我们需要做的就是把它转换成你的格式。MySQL有一个内置函数
秒到秒时间
,它可以做到这一点,但不幸的是,它的工作时间不超过839小时,并且没有单独列出日期。我们可以通过将天数与计算的其余部分分开计算,并在从差值中减去天数后,对剩余部分使用
SEC_TO_TIME

29:03:02:15 (DD:HH:MM:SS)
这似乎是正确的答案。虽然您希望的输出是
29:03:02:15
,但4月份有30天,输入中根本没有秒

当您使用聚合函数来确定秒数时,我们将无法将以天为单位的值与以秒为单位的值分开选择(否则,我们将得到平均天数,然后是平均秒数的一部分),因此您必须将其重写为

SELECT CONCAT(
    TIMESTAMPDIFF(DAY, '2016-04-12 13:06', '2016-05-12 16:08'), ':',
    SEC_TO_TIME(TIMESTAMPDIFF(SECOND, '2016-04-12 13:06', '2016-05-12 16:08') % 86400));
-- 30:03:02:00 (DD:HH:MM:SS)
这现在包括了几分之一秒,因为平均差可能不是整数秒。要排除它们,请使用
FLOOR
ROUND

SELECT CONCAT(
    FLOOR(AVG(TIMESTAMPDIFF(SECOND, createTime, closeTime)) / 86400), ':',
    SEC_TO_TIME(AVG(TIMESTAMPDIFF(SECOND, createTime, closeTime)) % 86400))
FROM deals WHERE dealid = 123;
-- 30:03:02:00.0000

可能类似于
date('m/d/Y H:m:s',$yourQueryResult)
@YUNOWORK这不是一个PHP问题。@hjpotter92我的错。在MySQL中,您可能会使用来自UNIXTIME的
(AVG(closeTime-createTime))
@YUNOWORK你有点忘了。可能是
日期('m/d/Y H:m:s',$yourQueryResult)
@YUNOWORK这不是一个PHP问题。@hjpotter92我的错。在MySQL中,您可能会使用来自UNIXTIME的
(AVG(closeTime-createTime))
@YUNOWORK你忘了一点。嗨,Matt,这是一个非常棒的答案,谢谢你与我们共享TIMESTAMPDIFF函数,这就是我所缺少的。嗨,Matt,这是一个非常棒的答案,谢谢你与我们共享TIMESTAMPDIFF函数,这就是我所缺少的。