部分之前记在有道云的忘记出处了抱歉。
部分函数介绍
CURDATE() # 获取日期 年-月-日 2020-12-18 now() # 获取时间 2020-12-18 13:49:01 sysdate() # 2020-12-18 13:51:00
date_sub() # 减去指定时间间隔 date_sub(curDate(), interval 1 day) # 当前时间减去1天
interval 利用其做运算
select curdate() - interval 1 day as test # 前-1天 select curdate() - interval 1 month as test # 当前- 1月 select curdate() - interval "1 1" year_month as test # 当前-1年1月
时间获取
select YEAR(CURDATE()) as year; --获取当前日期的年 SELECT * FROM work.user_status_logs where year(operation_date) = "2020" select MONTH(CURDATE()) as month; --获取当前日期的月 select DATE(CURDATE()) as date; --获取当前日期的年-月-日 SELECT * FROM work.user_status_logs where date(operation_date) = "2020-11-04" select HOUR(sysdate()) as hour; --获取当前时间的时 select MINUTE(sysdate()) as minute; --获取当前时间的分 select SECOND(sysdate()) as second; --获取当前时间的秒 select TIME(sysdate()) as time; --获取当前时间的时:分:秒
获取时间间隔
select to_days(now()) - to_days('20200506'); --比较两个日期间隔天数 select datediff(now(),'20200506'); --比较两个日期间隔天数 select TIMESTAMPDIFF(year,now(),'20220606'); --比较两个日期的间隔年数【后者-前者】 select TIMESTAMPDIFF(quarter,now(),'20220606'); --比较两个日期的间隔季度数 select TIMESTAMPDIFF(month,now(),'20220606'); --比较两个日期的间隔月数 select TIMESTAMPDIFF(week,now(),'20220606'); --比较两个日期的间隔周数 select TIMESTAMPDIFF(day,now(),'20220606'); --比较两个日期的间隔天数 select TIMESTAMPDIFF(hour,now(),'20220606'); --比较两个日期的间隔小时数 select TIMESTAMPDIFF(minute,now(),'20220606'); --比较两个日期的间隔分钟数 select TIMESTAMPDIFF(second,now(),'20220606'); --比较两个日期的间隔秒数
类型转换
select date_format(now(),'%Y-%m-%d'); --当前时间转化成String select str_to_date('2020-05-07','%Y-%m-%d'); --当前String转化成DATE类型
求近七天数据没有补0
思路: 生成一个 近七天时间临时表 与 数据库表分组查询结果 进行联查, 得出最终结果。
没有补0操作使用 ifnull() 函数完成。 来自: https://www.cnblogs.com/snake23/p/9562646.html
select a.click_date,ifnull(b.count,0) as count from ( SELECT curdate() as click_date union all SELECT date_sub(curdate(), interval 1 day) as click_date union all SELECT date_sub(curdate(), interval 2 day) as click_date union all SELECT date_sub(curdate(), interval 3 day) as click_date union all SELECT date_sub(curdate(), interval 4 day) as click_date union all SELECT date_sub(curdate(), interval 5 day) as click_date union all SELECT date_sub(curdate(), interval 6 day) as click_date ) a left join ( select date(created_at) as datetime, count(*) as count from skins_logs group by date(created_at) ) b on a.click_date = b.datetime;