當前一個業務需求,需要查找創建在三天以前的數據,表中是存了一個創建時間的;這個需求看起來很簡單,直接全部查找出來然后用代碼根據時間篩選一下就可以了。但這只是適用于數據量不大的情況下,如果數據量大,又要分頁的話,還用代碼實現的話,很可能會造成內存不足的問題。我認為mysql肯定提供了一些關于時間計算的函數,google一下,果不其然,發現了datediff和timediff這樣的函數,
datediff(date1,date2):計算date1減去date2的天數,但是計算規則限定死了,只按日期相減,29號早上減去28號晚上,結果還是為1,如圖1;
圖1
這跟我們常識不太一樣,我們的常識是,現在是早上11點,那么到昨天早上11點,才算是一天,昨天晚上11點到今天早上11點智能算半天。
所以不能用datediff函數,只能用timediff函數;
timediff(time1,time2):計算time1減去time2的時間數,這個減出來的是個time類型,而且還不能直接比較大小,這就很尷尬了。
圖2
如圖2,相減出來,有一百多個小時的,有幾十個小時的,但是如果加入時間相差大于20個小時這個限制條件之后,問題就來了:
圖3
如圖3,相差一百多個小時的并沒有被篩選出來。我猜測這個時間可能用的位運算之類的,具體沒有去求證。
所以相減出來的結果是沒有辦法直接比較大小的,這時候就需要把這個結果轉換成可以直接比較大小的秒數,用time_to_second(time1)這個函數,然后直接把限定的時間差也轉換成秒數,比如一天=24x3600秒,依此類推,然后就可以直接做篩選了。