當(dāng)前一個(gè)業(yè)務(wù)需求,需要查找創(chuàng)建在三天以前的數(shù)據(jù),表中是存了一個(gè)創(chuàng)建時(shí)間的梳杏;這個(gè)需求看起來很簡(jiǎn)單,直接全部查找出來然后用代碼根據(jù)時(shí)間篩選一下就可以了斑鸦。但這只是適用于數(shù)據(jù)量不大的情況下,如果數(shù)據(jù)量大稳懒,又要分頁的話,還用代碼實(shí)現(xiàn)的話,很可能會(huì)造成內(nèi)存不足的問題场梆。我認(rèn)為mysql肯定提供了一些關(guān)于時(shí)間計(jì)算的函數(shù)墅冷,google一下,果不其然或油,發(fā)現(xiàn)了datediff和timediff這樣的函數(shù)寞忿,
datediff(date1,date2):計(jì)算date1減去date2的天數(shù)顶岸,但是計(jì)算規(guī)則限定死了腔彰,只按日期相減,29號(hào)早上減去28號(hào)晚上辖佣,結(jié)果還是為1霹抛,如圖1;
這跟我們常識(shí)不太一樣卷谈,我們的常識(shí)是杯拐,現(xiàn)在是早上11點(diǎn),那么到昨天早上11點(diǎn)世蔗,才算是一天端逼,昨天晚上11點(diǎn)到今天早上11點(diǎn)智能算半天。
所以不能用datediff函數(shù)凸郑,只能用timediff函數(shù)裳食;
timediff(time1,time2):計(jì)算time1減去time2的時(shí)間數(shù)芙沥,這個(gè)減出來的是個(gè)time類型诲祸,而且還不能直接比較大小,這就很尷尬了而昨。
如圖2救氯,相減出來,有一百多個(gè)小時(shí)的歌憨,有幾十個(gè)小時(shí)的着憨,但是如果加入時(shí)間相差大于20個(gè)小時(shí)這個(gè)限制條件之后,問題就來了:
如圖3务嫡,相差一百多個(gè)小時(shí)的并沒有被篩選出來甲抖。我猜測(cè)這個(gè)時(shí)間可能用的位運(yùn)算之類的,具體沒有去求證心铃。
所以相減出來的結(jié)果是沒有辦法直接比較大小的准谚,這時(shí)候就需要把這個(gè)結(jié)果轉(zhuǎn)換成可以直接比較大小的秒數(shù),用time_to_second(time1)這個(gè)函數(shù)去扣,然后直接把限定的時(shí)間差也轉(zhuǎn)換成秒數(shù)柱衔,比如一天=24x3600秒,依此類推,然后就可以直接做篩選了唆铐。