2011-03-15 161 views
0

我有數據庫表,其結構如下:日期差異,包括時間

id int 
name varchar(20) 
dob datetime 

我需要找出那些記錄日期時間差大於1天

我知道,DATEDIFF()可以工作,但我還希望包括在計算時間(小時,分鐘,秒)

實施例: 2011-02-14 13時05分06秒(距離2011-02-15 131天:05:06) 但 2011-02-14 13點05分06秒(是不是從2011-02-15 13點04分06秒

任何建議之一一天?

回答

6

使用TIME_TO_SEC

SELECT TIME_TO_SEC(TIMEDIFF('2011-02-14 13:05:06','2011-02-15 13:06:06'))/86400; 
2

可以以另一種方式您的日期比較:

date1 < date_sub(date2, interval 1 day) 

這種比較是事實,如果DATE2和日期1之間的差值超過1天

+0

@Jacob:如果'date2' <'date1'表示比較總是返回false – zerkms 2011-03-15 07:19:20

+0

對不起,我的意思是說OP需要返回true的東西,如果date2大於1天以內或date2大於1天多於date1。如果date2比date1大1天以上,這隻會被捕獲。 – Jacob 2011-03-15 07:25:42

+0

@Jacob:可能是。 OP的要求很模糊...... – zerkms 2011-03-15 07:42:40

0
SELECT * FROM `table` 
WHERE `dob` NOT BETWEEN 
    '2011-02-14 13:05' - INTERVAL 1 DAY 
    AND 
    '2011-02-14 13:05' + INTERVAL 1 DAY 
0
select concat(TIMESTAMPDIFF(day,concat(small_date,' ',small_time),concat(big_date,' ',big_time))%24 ,' day ' , 
sec_to_time((TIMESTAMPDIFF(second,concat(small_date,' ',small_time),concat(big_date,' ',big_time))) -(
TIMESTAMPDIFF(day,concat(small_date,' ',small_time),concat(big_date,' ',big_time))%24*86400))) `datetimediff` 
from tmp 
0
SELECT TIME_TO_SEC(TIMEDIFF('2011-02-14 13:05:06','2011-02-15 13:06:06'))/86400; 

不是每天都有86400秒!所以當夏季/冬季時間發生變化時,每天會有兩次錯誤的回答,而且一天的時間會延長或縮短一小時。