2011-03-11 20 views
9

timediff dönüştürmek Bu benim sorgu:MySQL gün, saat, dakika çıktı, ikinci biçimi

SELECT TIMEDIFF(end_time,start_time) AS "total" FROM `metrics`; 

bana verir:

116:12:10 

116 saat, 12 dakika ve 10 saniye anlamına gelir.

Bunun yerine, ben 4 gün 20 saat, 12 dakika vb söylemek istiyorum

+0

O ya da değil, ben basit matematik uygulanarak yapılabilir düşünüyorum ... –

cevap

22
SELECT CONCAT(
FLOOR(HOUR(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30'))/24), ' days ', 
MOD(HOUR(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30')), 24), ' hours ', 
MINUTE(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30')), ' minutes') 

benim örnek aşağıda iki yorum göre

sabit datetime değerleri için END_TIME ve START_TIME kullanın Bu çözüm sadece 35 gün içinde tarih farklılıkları için çalışır. Başlangıç ​​ve bitiş arasında 35 günden fazla bir süre olduğunu biliyorsanız, bir aydan fazla bir süre geçtikten sonra bunu kullanmayın. TIMESTAMPDIFF kullanarak diğer cevaplar çalışacaktır.

+4

@richard için herhangi dahili fonksiyon olup olmadığını emin değilim: sorgu uzun fark dates.read için başarısız olur bu http : //www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/ – Gowri

+0

Bu işlev, girdilerle başarısız olur: SELECT CONCAT ( ZEMİN (HOUR (TIMEDIFF ('2010) -03-06 08:46 ',' 2010-01-01 12:30 '))/24),' gün ', MOD (HOUR (TIMEDIFF (' 2010-03-06 08:46 ',' 2010- 01-01 12:30 ')), 24),' saat ', DAKİKA (TIMEDIFF (' 2010-03-06 08:46 ',' 2010-01-01 12:30 ')),' dakika ') – nono

12
SELECT 
CONCAT(
TIMESTAMPDIFF(day,'2001-01-01 00:00:00','2001-01-02 23:10:00') , ' dagen ', 
MOD(TIMESTAMPDIFF(hour,'2001-01-01 00:00:00','2001-01-02 23:10:00'), 24), ' uren ', 
MOD(TIMESTAMPDIFF(minute,'2001-01-01 00:00:00','2001-01-02 23:10:00'), 60), ' minuten ' 
) 
İlgili konular