关于时间问题

部分之前记在有道云的忘记出处了抱歉。

部分函数介绍

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;
原文地址:https://www.cnblogs.com/ShanCe/p/14154617.html