當前一個業(yè)務需求,需要查找創(chuàng)建在三天以前的數(shù)據(jù),表中是存了一個創(chuàng)建時間的;這個需求看起來很簡單,直接全部查找出來然后用代碼根據(jù)時間篩選一下就可以了。但這只是適用于數(shù)據(jù)量不大的情況下,如果數(shù)據(jù)量大,又要分頁的話,還用代碼實現(xiàn)的話,很可能會造成內(nèi)存不足的問題。我認為mysql肯定提供了一些關(guān)于時間計算的函數(shù),google一下,果不其然,發(fā)現(xiàn)了datediff和timediff這樣的函數(shù),
datediff(date1,date2):計算date1減去date2的天數(shù),但是計算規(guī)則限定死了,只按日期相減,29號早上減去28號晚上,結(jié)果還是為1,如圖1;

這跟我們常識不太一樣,我們的常識是,現(xiàn)在是早上11點,那么到昨天早上11點,才算是一天,昨天晚上11點到今天早上11點智能算半天。
所以不能用datediff函數(shù),只能用timediff函數(shù);
timediff(time1,time2):計算time1減去time2的時間數(shù),這個減出來的是個time類型,而且還不能直接比較大小,這就很尷尬了。

如圖2,相減出來,有一百多個小時的,有幾十個小時的,但是如果加入時間相差大于20個小時這個限制條件之后,問題就來了:

如圖3,相差一百多個小時的并沒有被篩選出來。我猜測這個時間可能用的位運算之類的,具體沒有去求證。
所以相減出來的結(jié)果是沒有辦法直接比較大小的,這時候就需要把這個結(jié)果轉(zhuǎn)換成可以直接比較大小的秒數(shù),用time_to_second(time1)這個函數(shù),然后直接把限定的時間差也轉(zhuǎn)換成秒數(shù),比如一天=24x3600秒,依此類推,然后就可以直接做篩選了。