突然发现自己现在好久没有产出,虽然在别的平台写了点,但是像这样,我是己遇到一些还不错的东西或者遇到一些的问题做一个内容或者说知识点输出,接近两个月没有些还是挺少的。
今天的内容是关于,项目中会涉及到的关于日期的处理。我们日常处理业务一定会涉及到日期,一般来说我们都是用专门对应的datetime来保存的。
(这里我只针对MySQL,别的关系型数据库虽然说大差不差,但实际上函数支持和用法还是有区别的)
但是这样会遇到一个问题就是,和平常的数字,字符串不一样,日期的处理有他自己的特点,比如说平闰年,或者说是每个月的天数等等,之前在银行做开发用的是IBM的AIX没有对那个的平闰年函数,要自己写判断写批量shell脚本经常会用用到这个,尤其是银行算账对这个很敏感(什么100结尾要除以400,整除才算)。我的公众号:我是坑货
我们在SQL上操作的话就简单很多,我先列个列表,关于常见的日期函数(视对应的数据库为准)
使用,其实看对应的文档其实写的很清楚,我这里给一个文档地址
挑几个常用的来说一下
(1)NOW
NOW()函数一般不会单数使用,一般都是配合其他几个函数一起使用,比如对应数据里现在还有几天,直接SQL中通过别的日期函数做个减法
(2)EXTRACT
这个就是返回对应的日期时间单独的部分,比如返回所在年,或者月,或者日,小时,分。一般来说做一个归档,把某段时间段的找出来,比如说就要这个月的数据之类。
使用方法:
EXTRACT(MONTH FROM OrderDate) AS OrderMonth,
EXTRACT(DAY FROM OrderDate) AS OrderDay
(3)DATE_ADD和DATE_SUB
为什么把这俩一起说呢,因为一个是加法,一个是减法,而且使用方式差不多,有的时候甚至会一起使用。我的公众号:我是坑货(比如出租一个东西,要给人发短信,或者发手机通知,不能到期了再发,一般来说就是先加了组了多少天,然后再减去几天给人留一个提醒操作的空间)
DATE_ADD(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
1
2
3
有一点之前没怎么了解,我一直以为DATE_SUB是加,结果发现结果总是不对,里面有一个全是大写的“INTERVIAL”表示的是间隔意思,有的数据库可能不会要求这个写出来
再来一个我提前一天发通知的
DATE_SUB(DATE_ADD( aa.purchase_time, INTERVAL aa.year_limit MONTH ), INTERVAL '1' day
1