2013-04-27 40 views
0

我有一個時間字段在我的桌子,想只計算不同的是時間,而不是其日期與MySQL功能 這樣的:計算的日期時間字段的時間不同勢在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分鐘。 我想計算所有這些不同,並得到這個表中的平均值。

千恩萬謝

回答

3

一般來說,可以使用MySQL的TIME()功能僅提取DATETIME值的時間部分:

SELECT TIME(datetime1), TIME(datetime2) 

人們可以進一步與TIMEDIFF()結合此獲得的區別在兩個這樣的時間之間:

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

但是,由於結果表示爲TIME數據類型,並且沒有一個聚合函數可以使用這種數據類型,因此獲取平均值會更困難。相反,我提出以下建議兩輪牛車:

SELECT SEC_TO_TIME(AVG(
     UNIX_TIMESTAMP(SUBTIME(datetime2, TIME(datetime1))) 
     - UNIX_TIMESTAMP(DATE(datetime2)) 
     )) 
FROM my_table 
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 
)