背景
我们知道在Java中有Calender类,可以很方便的帮我们计算日期,但是在MySQL中如何用SQL语句来计算两个日期相隔多少秒呢?同理也可以求相隔多少天,多少小时,多少分钟等
MySQL中提供了一个函数可以帮我们计算
TIMESTAMPDIFF(unit,start,end)
说明:
unit
表示时间单位
FRAC_SECOND 表示间隔是毫秒
SECOND 秒
MINUTE 分钟
HOUR 小时
DAY 天
WEEK 星期
MONTH 月
QUARTER 季度
YEAR 年
start
和 end
分别表示开始日期,结束日期,可以是符合格式的日期字符串或date,datetime
案例
日期字符串
select
TIMESTAMPDIFF(SECOND,'20210607','20220707') as seconds,
TIMESTAMPDIFF(MINUTE,'20210607','20220707') as minutes,
TIMESTAMPDIFF(HOUR,'20210607','20220707') as hours,
TIMESTAMPDIFF(DAY,'20210607','20220707') as `day`,
TIMESTAMPDIFF(MONTH,'20210607','20220707') as `month`,
TIMESTAMPDIFF(YEAR,'20210607','20220707') as `year`;
混合的日期字符串
select
TIMESTAMPDIFF(SECOND,'2021-06-07','2022-07-07') as seconds,
TIMESTAMPDIFF(MINUTE,'20210607','2022-07-07') as minutes,
TIMESTAMPDIFF(HOUR,'20210607','2022-07-07 00:00:00') as hours,
TIMESTAMPDIFF(DAY,'2021-06-07','20220707') as `day`,
TIMESTAMPDIFF(MONTH,'2021-06-07 00:00:00','20220707') as `month`,
TIMESTAMPDIFF(YEAR,'20210607','20220707') as `year`;
注:
20220607
2022-06-07
2022-06-07 12:30:21
以上的日期字符串都函数都可以识别
如果是date或datetime
类型的日期,也是可以直接计算的
日期格式化
DATE_FORMAT(date,format)
案例,格式化不同的日期
select
DATE_FORMAT(NOW(),'%Y%M%D') as d1,
DATE_FORMAT(NOW(),'%Y%m%d') as d2,
DATE_FORMAT(NOW(),'%Y%m%d%H%i%s') as d3,
DATE_FORMAT(NOW(),'%Y-%m-%d') as d4,
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S') as d5;