突然發(fā)現(xiàn)自己現(xiàn)在好久沒有產(chǎn)出民效,雖然在別的平臺寫了點冕杠,但是像這樣谨娜,我是己遇到一些還不錯的東西或者遇到一些的問題做一個內(nèi)容或者說知識點輸出为流,接近兩個月沒有些還是挺少的呕屎。
今天的內(nèi)容是關(guān)于,項目中會涉及到的關(guān)于日期的處理敬察。我們?nèi)粘L幚順I(yè)務(wù)一定會涉及到日期秀睛,一般來說我們都是用專門對應(yīng)的datetime來保存的。
(這里我只針對MySQL静汤,別的關(guān)系型數(shù)據(jù)庫雖然說大差不差琅催,但實際上函數(shù)支持和用法還是有區(qū)別的)
但是這樣會遇到一個問題就是居凶,和平常的數(shù)字,字符串不一樣藤抡,日期的處理有他自己的特點侠碧,比如說平閏年,或者說是每個月的天數(shù)等等缠黍,之前在銀行做開發(fā)用的是IBM的AIX沒有對那個的平閏年函數(shù)弄兜,要自己寫判斷寫批量shell腳本經(jīng)常會用用到這個,尤其是銀行算賬對這個很敏感(什么100結(jié)尾要除以400瓷式,整除才算)替饿。我的公眾號:我是坑貨
我們在SQL上操作的話就簡單很多,我先列個列表贸典,關(guān)于常見的日期函數(shù)(視對應(yīng)的數(shù)據(jù)庫為準(zhǔn))
使用视卢,其實看對應(yīng)的文檔其實寫的很清楚,我這里給一個文檔地址
挑幾個常用的來說一下
(1)NOW
NOW()函數(shù)一般不會單數(shù)使用廊驼,一般都是配合其他幾個函數(shù)一起使用据过,比如對應(yīng)數(shù)據(jù)里現(xiàn)在還有幾天,直接SQL中通過別的日期函數(shù)做個減法
(2)EXTRACT
這個就是返回對應(yīng)的日期時間單獨的部分妒挎,比如返回所在年绳锅,或者月,或者日酝掩,小時鳞芙,分。一般來說做一個歸檔期虾,把某段時間段的找出來原朝,比如說就要這個月的數(shù)據(jù)之類。
使用方法:
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay
(3)DATE_ADD和DATE_SUB
為什么把這倆一起說呢镶苞,因為一個是加法竿拆,一個是減法,而且使用方式差不多宾尚,有的時候甚至?xí)黄鹗褂谩N业墓娞枺何沂强迂洠ū热绯鲎庖粋€東西谢澈,要給人發(fā)短信煌贴,或者發(fā)手機通知,不能到期了再發(fā)锥忿,一般來說就是先加了組了多少天牛郑,然后再減去幾天給人留一個提醒操作的空間)
DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
1
2
3
有一點之前沒怎么了解,我一直以為DATE_SUB是加敬鬓,結(jié)果發(fā)現(xiàn)結(jié)果總是不對淹朋,里面有一個全是大寫的“INTERVIAL”表示的是間隔意思笙各,有的數(shù)據(jù)庫可能不會要求這個寫出來
再來一個我提前一天發(fā)通知的
DATE_SUB(DATE_ADD( aa.purchase_time, INTERVAL aa.year_limit MONTH ), INTERVAL '1' day
1