MySql时间计算
MySql时间计算
1 | SELECT |
生成最近七天的日期不包括当天
1 | SELECT @cdate := date_add(@cdate, interval - 1 day) as date FROM(SELECT @cdate := date_add(date_sub(CURDATE(),interval 1 DAY), interval + 1 DAY) from resource_publish) t0 LIMIT 7; |
生成最近七天的日期包括当天
1 | SELECT @cdate := date_add(@cdate, interval - 1 day) as date_str FROM(SELECT @cdate := date_add(CURDATE(), interval + 1 DAY) from resource_publish) t0 LIMIT 7; |
生成最近七天的日期包括当天
1 | SELECT @cdate := date_add(@cdate, interval - 1 day) as date_str FROM(SELECT @cdate := date_add('202006017', interval + 1 DAY) from resource_publish) t0 LIMIT 7; |
生成十二天每月的日期包括当月
1 | SELECT @cdate := date_add(@cdate, interval - 1 MONTH) as date_str FROM(SELECT @cdate := date_add(CURDATE(), interval + 1 MONTH) from resource_publish) t0 LIMIT 12; |
查询最近七个月每月日期
1 | SELECT @cdate := date_add(@cdate, interval - 1 MONTH) as daytime FROM(SELECT @cdate := date_add(date_sub(CURDATE(),interval 1 MONTH), interval + 1 MONTH) from test_tb) t0 LIMIT 7; |
查询最近六个月每月月末日期
1 | SELECT @lastDay := last_day( date_add(@lastDay,interval 1 month )) lastDays from (SELECT @lastDay := date_add(curdate(),interval -6 month) from test_tb limit 6) a; |
查询最近七月的月份
1 | SELECT date_format(@lastDay := last_day( date_add(@lastDay,interval 1 month ) ) ,'%Y-%m' ) lastDays from (SELECT @lastDay := date_add(curdate(),interval -6 month) from test_tb limit 6) a; |
获取当年所有月份
1 | SELECT date_format(@lastDay := last_day(date_add(@lastDay,interval 1 month)) ,'%Y-%m') lastDays from (SELECT @lastDay := date_add(curdate(),interval -MONTH(curdate()) month) from test_tb LIMIT 12) a; |
获取当年所有月份
1 | SELECT CASE WHEN length(mon) = 1 THEN concat(LEFT (CURRENT_DATE, 5),'0',mon) ELSE concat(LEFT(CURRENT_DATE, 5), mon) END months FROM (SELECT @m :=@m + 1 mon FROM test_tb,(SELECT @m := 0) a) aa LIMIT 12; |
生成当年十二个月
1 | SELECT CONCAT(YEAR(CURRENT_DATE()),'-01') AS date UNION |
获取当年第一个月份
1 | SELECT date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval MONTH(CURDATE())-1 month),'%Y-%m'); |
上月月份
1 | select extract(YEAR_MONTH from date_add(NOW(), interval -1 month)); |
上年月份
1 | select extract(YEAR_MONTH from date_add(NOW(), interval -1 year)); |
查看最近两周内的工作日
1 | SELECT |
和其他列组合自动生成序号
1 | set @rownum=0; |
获取六周前的周一
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 35 DAY); |
获取当前周所在的周一
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 0 DAY); |
获取当前周所在的周日
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 6 DAY); |
获取六个月前第一天
1 | SELECT date_add(DATE_ADD(curdate(),interval -day(curdate())+1 day),interval -6 month); |
获取当月第一天
1 | SELECT DATE_ADD(curdate(),interval -day(curdate())+1 day); |
当前日期是第几周
1 | -- YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode]) |
当前日期在当月第几周
1 | -- DAYOFWEEK 转换日期为周几的函数,1 = Sunday, 2 = Monday, 3 = Tuesday, 4 = Wednesday, 5 = Thursday, 6 = Friday, 7 = Saturday |
查看当日是周几
1 | SELECT dayofweek(now()); |
当年第一天
1 | select date_sub(curdate(),interval dayofyear(now())-1 day); |
当年第一天
1 | -- date_format(date,'%u') |
当年最后一天
1 | SELECT concat(YEAR(now()),'-12-31'); |
当前week的第一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY); |
当前week的最后一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY); |
前一week的第一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 8 DAY); |
前一week的最后一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY); |
前两week的第一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 15 DAY); |
前两week的最后一天
1 | select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 9 DAY); |
获取当前日期
1 | SELECT NOW(),CURDATE(),CURTIME() |
获取前一天日期
1 | select date_sub(curdate(),interval 1 day); |
获取后一天
1 | SELECT DATE_SUB(CURDATE(),INTERVAL -1 DAY); |
获取当月最后一天
1 | select last_day(curdate()); |
当前月的最后一天
1 | select last_day(now()); |
当前月的最后一天
1 | select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-1 month); |
获取本月第一天
1 | select DATE_ADD(curdate(),interval -day(curdate())+1 day); |
获取本月第一天
1 | select date_add(curdate(), interval - day(curdate()) + 1 day); |
当前月的第一天
1 | select concat(date_format(last_day(now()),'%y-%m-'),'01'); |
获取上月月份
1 | select extract(YEAR_MONTH from date_add(NOW(), interval -1 month)); |
上月第一天
1 | select date_sub(date_sub(date_format(now(),'%Y-%m-%d'),interval extract(day from now())-1 day),interval 1 month); |
上月第一天
1 | select concat(date_format(last_day(now() - interval 1 month),'%y-%m-'),'01'); |
获取上月月份
1 | SELECT date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval 1 month),'%Y-%m'); |
获取当年1月份
1 | select date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval month(curdate())-1 month),'%Y-%m'); |
获取下个月的第一天
1 | select date_add(curdate()-day(curdate())+1,interval 1 month); |
获取当前月的天数
1 | select DATEDIFF(date_add(curdate()-day(curdate())+1,interval 1 month ),DATE_ADD(curdate(),interval -day(curdate())+1 day)) from dual; |
上两月第一天
1 | select concat(date_format(last_day(now() - interval 2 month),'%y-%m-'),'01'); |
上两月第一天
1 | select concat(date_format(last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month),'%Y-%m-'),'01'); |
上月最后一天
1 | select last_day(now() - interval 1 month); |
上两月最后一天
1 | select last_day(now() - interval 2 month); |
上两月最后一天
1 | select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month); |
上两月最后一天
1 | select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month); |
MySQL 查询百分占比三种方式
1 | -- 1.字段里嵌套子查询统计总数 |
MySQL时间格式化
1 | SELECT DATE_FORMAT('2020-06-17 15:23:16.463','%Y-%m-%d %H:%i:%s.%f') |
MySQL判空函数
1 | IFNULL(expr,expr) -- 处理如果字段为空,返回默认值,sum是统计求和, |
MySQL两时间计算、年份差、月份差、天数差
1 | -- 年份差 |
根据时间差生成月份列表
1 | -- 今后的日期可达近80年 |
根据时间差生成日期列表
1 | -- 今后的日期可达近300年 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Blank!
评论