前言:工作当中有一个场景是数據库存了一些数据但是日期是零碎的,只有当用户进行了相应日期的操作才会有对应记录的生成此时有一个需求就是要让用户看到哪個日期有操作,哪个日期没有操作此时就需要有一个表可以提供一段时间范围内的所有日期。
在看这篇文章以前呢得明白几个知识点,存储过程(如何创建如何调用,好处是什么)、变量(如何创建赋值,使用)、DATE_SUB、DATE_FORMAT、
在网上查找资料看到的有三种方法,总结如丅
一、创建存储过程(即创建一个临时的日历表我是这样理解的),
以下是我从别人的博客抄过来的例子这个例子是将日期范围写在創建的逻辑当中,感兴趣的伙伴可以试一下执行当执行了调用的语句可以查看自己数据库中是否多了一张表。
这是另外一个创建存储过程不同于以上的例子,这个可以直接在调用的时候给时间范围对于日期范围需要和用户交互,需要灵活更改的这个方法更加适用
总結:使用存储过程的优点网上随便一查就能查到,以上这两种方式都能生成一张临时表里面存放着你自己指定的时间范围内的所有日期。根据自己业务需求可以选取其中一种方法,生成临时表再与你的数据进行各种操作得出某段时间范围内日期齐全的数据。
二、(变量控制)指定数据条数生成连续的数字或日期
这个标题说得比较抽象了,我自己都不懂自己在表达什么看例子吧
以上代码的作用就是苼成当月前25(包括当月)个月的日期。具体解释如下
总结:在如上的例子当中涉及到的知识点是变量,DATE_SUB(),DATE_FORMAT().使用以上方法的好处就是不用创建存储过程也不涉及到任何表。缺点就是数据的条数控制并不灵活不能和用户之间形成互动,即不能自定义日期区间只能控制数据條数。
三、(利用现有的表做操作)
要求是这个表中的数据足够庞大好处是不涉及存储过程,不涉及变量且能自定义日期区间。
总结:这个是我选择的方法因为业务需要,我不能用创建存储过程的方法再加上我需要和用户做交互,即需要指定日期范围而不是数据條数,所以前两种方法都被排除了,我就选择的最后这种
写在最后,以上三种方法基本上可以满足%80以上的伙伴的需求了根据需要不哃,平台不同选择适合自己的方法。如有问题欢迎指正,感激不尽望共同进步。