程序員應(yīng)知應(yīng)會(huì)之MySQL里怎么計(jì)算時(shí)間日期之差?
本文轉(zhuǎn)載自微信公眾號(hào)「活在信息時(shí)代」,作者活在信息時(shí)代。轉(zhuǎn)載本文請(qǐng)聯(lián)系活在信息時(shí)代公眾號(hào)。
很多程序員都會(huì)用到時(shí)間差的應(yīng)用,比如說(shuō)計(jì)算一個(gè)用戶(hù)的vip賬戶(hù)是否過(guò)期之類(lèi)的,就需要用當(dāng)前的日期減去用戶(hù)注冊(cè)的時(shí)間,如果大于vip賬戶(hù)的有效天數(shù),比如說(shuō)是30天,那么就把用戶(hù)的vip置為無(wú)效。
那么這種需求如何用Mysql來(lái)實(shí)現(xiàn)呢?很多人會(huì)想到用當(dāng)前時(shí)間減去原來(lái)的時(shí)間就行了。那么我們來(lái)試試看,比如說(shuō)我們用當(dāng)前日期(2022-11-30)減去用戶(hù)注冊(cè)日期,比如說(shuō)是2022-11-1。
然后我們來(lái)看一下結(jié)果。
咦,出現(xiàn)了一個(gè)奇怪的大數(shù)。
那么這個(gè)數(shù)是什么呢?原來(lái)Mysql對(duì)于這種時(shí)間直接相減的做法是直接把年月日時(shí)分秒拼起來(lái)成為一個(gè)大數(shù)。
例如2022-11-30 12:15:56,會(huì)被拼成是20221130121556,然后另一個(gè)日期也是如此,所以就會(huì)得出一個(gè)奇怪的數(shù)。
那么我們想要做時(shí)間相減要什么操作呢?可以用timestampdiff函數(shù)。
它的作用是返回兩個(gè)日期時(shí)間之間的整數(shù)差。函數(shù)語(yǔ)法分別為:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
其中unit是返回值的單位,可以用year, month, week, day, hour, minute, second和microsecond。
我們來(lái)試一下,例如我們使用:
我們看到結(jié)果是正確的結(jié)果10。
Mysql的時(shí)間日期差函數(shù)還有幾個(gè),例如time_diff等,但是最好用的就是timestampdiff,基本上只用這一個(gè)函數(shù)就夠了。大家都學(xué)會(huì)了嗎?