• 常用MySQL生成时间序列

  --生成最近七天的日期,不包括当天

  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;    

2020-06-16
2020-06-15
2020-06-14
2020-06-13
2020-06-12
2020-06-11
2020-06-10

  --生成最近七天的日期,包括当天

  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;

2020-06-17
2020-06-16
2020-06-15
2020-06-14
2020-06-13
2020-06-12
2020-06-11

  --生成最近七天的日期,包括当天

  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;

2020-06-17
2020-06-16
2020-06-15
2020-06-14
2020-06-13
2020-06-12
2020-06-11

  --生成十二天每月的日期,包括当月

  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;

2020-06-17
2020-05-17
2020-04-17
2020-03-17
2020-02-17
2020-01-17
2019-12-17
2019-11-17
2019-10-17
2019-09-17
2019-08-17
2019-07-17

  -- 查询最近七个月每月日期

  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;

2020-05-17
2020-04-17
2020-03-17
2020-02-17
2020-01-17
2019-12-17
2019-11-17

  -- 查询最近六个月每月月末日期

  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;

2020-01-31
2020-02-29
2020-03-31
2020-04-30
2020-05-31
2020-06-30

  -- 查询最近七月的月份

  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;

2020-01
2020-02
2020-03
2020-04
2020-05
2020-06

  -- 获取当年所有月份

  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;

  -- 获取当年所有月份

  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;

2020-01
2020-02
2020-03
2020-04
2020-05
2020-06
2020-07
2020-08
2020-09
2020-10
2020-11
2020-12

  --生成当年十二个月

SELECT CONCAT(YEAR(CURRENT_DATE()),'-01') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-02') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-03') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-04') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-05') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-06') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-07') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-08') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-09') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-10') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-11') AS date UNION
SELECT CONCAT(YEAR(CURRENT_DATE()),'-12') AS date

  -- 获取当年第一个月份

  SELECT date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval MONTH(CURDATE())-1 month),'%Y-%m');

2020-01

  -- 获取时间字符串第一个月份

  SELECT date_format(date_sub(concat('2020-06', '-01'), interval MONTH(concat('2020-06', '-01'))-1 month), '%Y-%m')

  -- 上月月份

  select extract(YEAR_MONTH from date_add(NOW(), interval -1 month));      -- 202005
  -- 上年月份
  select extract(YEAR_MONTH from date_add(NOW(), interval -1 year));       --201906

  -- 查看最近两周内的工作日

  SELECT * FROM(SELECT daystr,WEEKDAY(daystr) AS wd FROM(SELECT @cdate := date_add(@cdate, interval - 1 day) as daystr FROM(SELECT @cdate := date_add(date_sub(CURDATE(),interval 1 DAY), interval + 1 DAY) from tb_name ) t0 LIMIT 14) ds) aa WHERE wd!='5' AND wd!='6';

1    2020-06-16
0 2020-06-15
4 2020-06-12
3 2020-06-11
2 2020-06-10
1 2020-06-09
0 2020-06-08
4 2020-06-05
3 2020-06-04
2 2020-06-03

  set @rownum=0; select @rownum:=@rownum+1 as rownum;select (@i:=@i+1) as rownum FROM (select @i:=0) as rn;      -- 和其他列组合自动生成序号

  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 35 DAY);      -- 获取六周前的周一:2020-05-11

  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 0 DAY);      -- 获取当前周所在的周一:2020-06-15

  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 6 DAY);    -- 获取当前周所在的周日:2020-06-021

  SELECT date_add(DATE_ADD(curdate(),interval -day(curdate())+1 day),interval -6 month);   -- 获取六个月前第一天:2019-12-01

  SELECT DATE_ADD(curdate(),interval -day(curdate())+1 day);        -- 获取当月第一天:2020-06-01

  • WEEK(date[,mode])函数

  此函数返回日期的周数。双参数的形式WEEK()允许你指定星期是否开始于周日或周一,以及是否返回值应在范围从0到53或从1到53。 如果省略了mode参数,系统default_week_format变量的值被使用。

  SELECT WEEK(‘2020-06-17’,1);    --当前日期是第:25 周

  • WEEKOFYEAR(date)

  返回日期用数字表示的范围是从1到53的日历周。WEEKOFYEAR()是一个兼容性函数,它等效于WEEK(date,3)。

  SELECT WEEKOFYEAR('2020-06-17');    --当前日期是第:25 周

  • YEARWEEK

  YEARWEEK 是获取年份和周数的一个函数,函数形式为 YEARWEEK(date[,mode])

  SELECT YEARWEEK('2020-06-17');      -- 当前日期是第:202024

  date_format(date,'%u')
  %U 周 (01-53) 星期日是一周的第一天
  %u 周 (01-53) 星期一是一周的第一天

  • DAYOFWEEK

  DAYOFWEEK 转换日期为周几的函数,1 = Sunday, 2 = Monday, 3 = Tuesday, 4 = Wednesday, 5 = Thursday, 6 = Friday, 7 = Saturday

  select DAYOFWEEK('2020-06-17');      -- 周三为 4

  SELECT dayofweek(now());          -- 查看当日是周几

  --当年第一天: 2020-01-01
  select date_sub(curdate(),interval dayofyear(now())-1 day);

  --当年第一天: 2020-01-01 
  select concat(date_format(last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-6 month),'%y-%m-'),'01');

  --当年最后一天: 2020-12-31
  SELECT concat(YEAR(now()),'-12-31');

  --当前week的第一天: 2020-06-14
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 1 DAY);

  --当前week的最后一天: 2020-06-20
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) - 5 DAY);

  --前一week的第一天: 2020-06-07
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 8 DAY);

  --前一week的最后一天: 2020-06-13
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 2 DAY);

  --前两week的第一天: 2020-05-31
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 15 DAY);

  --前两week的最后一天: 2020-06-06
  select date_sub(curdate(),INTERVAL WEEKDAY(curdate()) + 9 DAY);

  select curdate();                --获取当前日期

  select date_sub(curdate(),interval 1 day);     -- 获取前一天日期

  select last_day(curdate());             --获取当月最后一天:2020-06-30

  select last_day(now());              -- 当前月的最后一天:2020-06-30

  -- 当前月的最后一天:2020-06-30 
  select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-1 month); 

  select DATE_ADD(curdate(),interval -day(curdate())+1 day);          --获取本月第一天:2020-06-01

  select date_add(curdate(), interval - day(curdate()) + 1 day);         --获取本月第一天:2020-06-01

  select concat(date_format(last_day(now()),'%y-%m-'),'01');           --当前月的第一天: 2020-06-01

  select extract(YEAR_MONTH from date_add(NOW(), interval -1 month));    --获取上月月份:202005

  -- 上月第一天:2020-05-01
  select date_sub(date_sub(date_format(now(),'%Y-%m-%d'),interval extract(day from now())-1 day),interval 1 month);
  SELECT date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval 1 month);

  --上月第一天:2020-05-01 
  select concat(date_format(last_day(now() - interval 1 month),'%y-%m-'),'01');

  -- 获取上月月份:2020-05
  SELECT date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval 1 month),'%Y-%m');

  select date_format(date_add(curdate(),interval -1 month),'%Y-%m');

  --获取当年1月份:2020-01

  select date_format(date_sub(date_sub(curdate(),interval day(curdate()) - 1 day),interval month(curdate())-1 month),'%Y-%m');

  -- 获取下个月的第一天:2020-07-01
  select date_add(curdate()-day(curdate())+1,interval 1 month);

  --获取当前月的天数:30
  select DATEDIFF(date_add(curdate()-day(curdate())+1,interval 1 month ),DATE_ADD(curdate(),interval -day(curdate())+1 day)) from dual;  

  --两月第一天: 2020-04-01
  select concat(date_format(last_day(now() - interval 2 month),'%y-%m-'),'01'); 

  --两月第一天: 2020-04-01  
  select concat(date_format(last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month),'%Y-%m-'),'01');  

  --上月最后一天: 2020-05-31 
  select last_day(now() - interval 1 month); 

  --上两月最后一天: 2020-04-30 
  select last_day(now() - interval 2 month);

  --上两月最后一天: 2020-04-30 
  select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month); 

  --上两月最后一天: 2020-04-30  
  select last_day(makedate(extract(year from curdate()),1) + interval quarter(curdate())*3-3 month);

  -- MySQL 查询百分占比三种方式:1.字段里嵌套子查询统计总数,2.嵌套临时表统计总数,3.设置临时变量统计总数

  set @sum=(select sum(ct_col) from test_tb);

  select ct_col,round((ct_col/@sum*100),2) as ct from test_tb group by ct_col order by ct desc;

  • MySQL时间格式化:  %Y-%m-%d %H:%i:%s.%f
  SELECT DATE_FORMAT('2020-06-17 15:23:16.463','%Y-%m-%d %H:%i:%s.%f')
  2020-06-17 15:23:16.463000
  • MySQL判空函数:

  IFNULL(expr,expr)       处理如果字段为空,返回默认值,sum是统计求和,

  IFNULL(SUM(expr1),expr2)  是统计求和之后为空返回默认值

  SUM(IFNULL(expr1,expr2))  是判断字段为空返回默认值再求和

  IF(expr1,expr2,expr3)      条件判断,true是expr2,false是expr3,double不能直接比较

作者:Jason Zeng 于 2020-06-17
博客:http://www.cnblogs.com/zengming/
GItHub:https://github.com/lovelifeming
严正声明:
1.由于本博客部分资源来自互联网,版权均归原作者所有。转载的目的是用于学术交流与讨论学习,将不对任何资源负法律责任。
2.若无意中侵犯到您的版权利益,请来信联系我,我会在收到信息后会尽快给予处理!
3.所有资源内容仅供学习交流之用,请勿用作商业用途,谢谢。
4.如有转发请注明出处,来源于http://www.cnblogs.com/zengming/,谢谢合作。

MySQL获取周、月、天日期,生成排序号的更多相关文章

  1. java 和 mysql 获取周 星期 的第一天 最后一天 或者 月的 日期(字符串转日期,日期转字符串,日期加减)

    获取周的第一天,最后一天 System.out.println(getStartEndDate("2016-05-01", 1)); 获取星期的第一天和最后一天 System.ou ...

  2. MySql按周/月/日分组统计数据的方法

    知识关键词:DATE_FORMAT select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case grou ...

  3. jquery获取周对应的日期

    项目中用到按周显示的功能,找了一个,然后自己修改了一下,留着以后用: 这是代码,要是直接显示的话就把第43行去掉就行了,如果想要得到数据按照自己的想法重新渲染就保留43行,直接看51行,52行就是你要 ...

  4. MySql 按周/月/日统计数据的方法

    知识关键词:DATE_FORMAT  select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case gro ...

  5. Flex自定义组件开发之日周月日期选择日历控件

    原文:Flex自定义组件开发之日周月日期选择日历控件         使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的 ...

  6. js日期计算及快速获取周、月、季度起止日,获取指定日期周数以及星期几的小例子

    JS获取日期时遇到如下需求,根据某年某周获取一周的日期.如开始日期规定为星期四到下一周的星期五为一周. 格式化日期: function getNowFormatDate(theDate) { var ...

  7. [Java] 获取本月周次和日期时间段信息

    package com.wdcloud.monitoring.common; import java.text.SimpleDateFormat; import java.util.ArrayList ...

  8. 用js获取周、月第一天和最后一天(转载)

    var getCurrentWeek = function (day) { var days = ["周日", "周一", "周二", &q ...

  9. mysql中如何查看某个日期所在的周一是几号?某个日期所在的一周开始时间是几号?

    需求描述: 在编写SQL的时候,有这么个需求,就是要查出来某个日期所在的周一是几号,进行了测试,在此进行记录下. 测试过程: 议题:查看某个日期所在的周一是几号 分析:如果某个日期是周一,那么加上整数 ...

  10. java 获取 获取某年某月 所有日期(yyyy-mm-dd格式字符串)

    总结一些日期常用的代码,方便以后直接拿 <code> /** * java 获取 获取某年某月 所有日期(yyyy-mm-dd格式字符串) * @param year * @param m ...

随机推荐

  1. w3cschool-Flink 入门

    Flink 入门   Apache Flink是一个框架和分布式处理引擎,用于在无界和有界数据流上进行有状态的计算.Flink被设计为在所有常见的集群环境中运行,以内存中的速度和任何规模执行计算. A ...

  2. Mysql死锁问题如何排查和解决

    Mysql 查询是否存在锁表有多种方式,这里只介绍一种最常用的. 1.查看正在进行中的事务SELECT * FROM information_schema.INNODB_TRX2.查看正在锁的事务SE ...

  3. Win10部分软件程序中输入中文变成问号??如何处理【详细步骤】

    近期在win10系统中,出现了一个问题,那就是在部分程序软件中输入中文之后,会直接显示问号,哪怕是更换输入法也没有任何用.那么遇到这个问题,我们要如何处理呢?下面IT百科分享一下Win10系统部分软件 ...

  4. 02如何直接使用uni-app中提供的模板之公告滚动

    用hBuibler将提供的模板下载下载,通过url上的路径找到你需要的模板对应的位置. 然后将这个文件夹中的diamante全部赋值过来就ok了. <view class="uni-p ...

  5. 报错sql_mode=only_full_group_by

    这个问题的原因是,在这种模式下,sql分组时默认只能select + 分组字段以及聚合函数,相当于做一个规范检查 但很多时候并不需要这个检查,因为真实sql中,分组后很多字段是1对1的,比如分组id, ...

  6. Keepalived基本原理

    本文分享自天翼云开发者社区<Keepalived基本原理>,作者:Ujnrfc Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案.高可用:广义来讲, ...

  7. [记录点滴] 小心 Hadoop Speculative 调度策略

    [记录点滴] 小心 Hadoop Speculative 调度策略 目录 [记录点滴] 小心 Hadoop Speculative 调度策略 [0x00] 摘要 [0x01] 缘由 [0x02] 代码 ...

  8. PC端自动化测试实战教程-1-pywinauto 环境搭建(详细教程)

    1.简介 之前总有人在群里或者私信留言问:Windows系统安装的软件如何自动化测试呢?因为没有接触过或者遇到过,所以说实话宏哥当时也不清楚怎么实现,怎么测试.然而在一次偶然的机会接触到了Python ...

  9. mysql之数据连接池

    数据库连接池 C3P0: 配置文件 <?xml version="1.0" encoding="UTF-8"?> <c3p0-config&g ...

  10. Python 潮流周刊#90:uv 一周岁了,优缺点分析(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...