1.应用场景
有时候,需要自动生成某一年的日期表(比如用于录入当年的法定节假日,或者其他需要生成一整年只含日期数据的空表,方便以后补充)
2.代码
例如:需要生成2008年的日期表
2.1. 前期准备
需要一张只包含id为1-500的表,数据如下(表怎么快速生成不做叙述)
select * from t500;
结果集:
id |
---|
1 |
2 |
3 |
4 |
5 |
6 |
… |
500 |
2.2. sql代码
select DATE_ADD(
'2008-01-01'
,INTERVAL t500.id-1 day) as date
-- 通过date_add函数生成本年的每一天
from t500
where t500.id<=datediff('2009-01-01','2008-01-01')
-- 本年总共的天数(本例:2008年为366天)
2.3. 结果集如下
date |
---|
2008-01-01 |
2008-01-02 |
2008-01-03 |
2008-01-04 |
… |
2008-12-31 |
2.4. 生成本年的日期表
下面是其中一种写法:
(当然,也可以使用concat连接字符串year
,-01-01
等其他方法)
select DATE_ADD(start_day,INTERVAL t500.id-1 day) as date
from
(
select start_day,
DATE_ADD(start_day,INTERVAL 1 year) as end_day
from
(
select DATE_ADD(CURRENT_DATE,INTERVAL -DAYOFYEAR(CURRENT_DATE)+1 day) as start_day
) a
) a,t500
where t500.id<=DATEDIFF(end_day,start_day)
2.5. 结果集如下
date |
---|
2022-01-01 |
2022-01-02 |
… |
2022-12-31 |
版权声明:本文为weixin_44286256原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。