在mysql中计算datetime字段中时间的不同

时间:2013-04-27 08:48:14

标签: php mysql datetime

我的表中有一个日期时间字段,并且只想计算不同的时间,而不是使用mysql函数计算日期 像这样:

datetime1 : 2013-04-08 08:30:00
datetime2 : 2013-03-08 08:35:00

和另一个样本:

datetime1 : 2013-04-08 08:30:00
datetime2 : 2013-04-08 08:20:00

并且这2场的时间不同仅为5分钟和-10分钟。 我想计算所有这些不同,并在表格中得到这个时间的平均值。

非常感谢

2 个答案:

答案 0 :(得分:3)

一般来说,可以使用MySQL的TIME()函数仅提取DATETIME值的时间部分:

SELECT TIME(datetime1), TIME(datetime2)

还可以将其与TIMEDIFF()结合起来,以获得两个这样的时间之间的差异:

SELECT TIMEDIFF(TIME(datetime2), TIME(datetime1))

但是,由于结果表示为TIME数据类型,并且没有任何聚合函数可以使用这种数据类型,因此获取平均值会稍微困难一些。相反,我推荐以下hackery:

SELECT SEC_TO_TIME(AVG(
         UNIX_TIMESTAMP(SUBTIME(datetime2, TIME(datetime1)))
       - UNIX_TIMESTAMP(DATE(datetime2))
       ))
FROM   my_table

答案 1 :(得分:2)

如果你想计算平均值,我建议你使用UNIX时间戳,因为DATETIME没有负值,这使得普通平均值无用。

SELECT
  AVG(
    UNIX_TIMESTAMP(datetime2)-UNIX_TIMESTAMP(datetime2)
  ) AS average
FROM tablename

会以秒为单位给出平均值。

如果您想要伪 - DATETIME格式,请使用

SELECT
  CONCAT(
    IF(average<0,"-",""),
    FROM_UNIXTIME(ABS(average))
  ) AS averagedt
FROM (
    -- above query here
)