数据分析写起sql真的很烦啊。尤其是遇到各种日期计算。
这里总结了一些MySQL中的常用日期计算,希望给和我一样的sql苦手一点启发呀! love&peace ~(╹▽╹)
1、日期加减常数
这里用 reg
表里的一条数据reg_time 2018-09-10 13:00:00
来做基础数据
a. INTERVAL
加减时间单位
举个栗子:
SELECT
reg_time - INTERVAL 5 day as mimus_5D, # - 5天
reg_time + INTERVAL 5 day as plus_5D, # + 5天
reg_time - INTERVAL 5 month as minus_5M, # - 5个月
reg_time - INTERVAL 5 year as minus_5Y # - 5年
FROM `reg`
;

b. 用DATE_ADD
函数
与前一个类似,只是调整了参数顺序
SELECT
DATE_ADD(reg_time, INTERVAL -5 day) as mimus_5D,
DATE_ADD(reg_time, INTERVAL 5 day) as plus_5D,
DATE_ADD(reg_time, INTERVAL -5 month) as minus_5M,
DATE_ADD(reg_time, INTERVAL -5 year) as minus_5Y
FROM `reg`
;
同样的结果。
两个函数的时间单位都同样支持hour/minute/second
2、计算两个日期之间的天数
这里主要是用DATEDIFF
来计算间隔的天数。
这次虚构一个log表
来当栗子
uid | reg_date | log_date |
---|---|---|
1 | 2018-09-10 | 2018-09-20 |
SELECT DATEDIFF(log_time, reg_time) #DATEDIFF(晚日期,早日期 )
FROM `log`
结果是10
这里要注意的一点是,SQL Server 中求日期间隔的函数也是DATEDIFF
,但是用法是DATEDIFF(返回的时间单位,早日期, 晚日期)
,相较于 MySQL 多了一个单位参数,并且日期的顺序是相反的(其实日期参数并无要求只是遵循先后顺序会避免结果出现负数)。如果在 MySQL 中加入第一个单位参数是会报错的。
网友评论