点击蓝色字关注“SQL数据库运维”

话不多说,利用SQL Server数据库建立存储过程生成日期维度表。
一、创建日期维度表(RQ_TABLE)左右滑动可查看代码
CREATE TABLE RQ_TABLE(COUNTRY VARCHAR(5),--'国家'City VARCHAR(5) ,--'地市'DATE_NAME VARCHAR(20) ,--'日历日期'YEAR CHAR(4),--'年'MONTH CHAR(2),--'月'DAY CHAR(2),--'日'WEEK CHAR(6),--'星期'QUARTER varchar(2) NULL,--季度FWEEK varchar(6) NULL,--一年中的第几周,国外周日是一周的第一天,周六是最后一天Weekend varchar(20) NULL,--是否为周末CREATOR VARCHAR(32),--'创建人'CREATE_DATE DATETIME ,--'创建日期'CREATE_INST VARCHAR(20),--'创建公众号'DEL_FLAG CHAR(1) DEFAULT 0 ,--'删除标志' 0:不删除,1:已删除TS DATETIME DEFAULT GETDATE()--'时间戳')
二、创建生成日期维度表数据的存储过程(PROC_RQ)左右滑动可查看代码
CREATE PROC PROC_RQ(@YEAR INT )ASBEGINDECLARE @i INT;DECLARE @START_DATE VARCHAR(20);DECLARE @END_DATE VARCHAR(20);DECLARE @DATE_COUNT INT;SET @i=0;--定义一年的开始日期,用CONCAT函数将年份和月份日期拼接起来SET @START_DATE= CONCAT(@YEAR, '-01-01');--定义一年的结束日期SET @END_DATE = CONCAT(@YEAR+1,'-01-01');--如果表内已经存在要新建年份的日历,则存储过程要先删除DELETE FROM RQ_TABLE WHERE YEAR = @YEAR;--计算开始到结束日期一共有多少天,DATEDIFF函数计算日期的间隔天数SET @DATE_COUNT = DATEDIFF(DAY,@START_DATE,@END_DATE);--建立循环,条件是@i小于一年的天数WHILE @i < @DATE_COUNTBEGININSERT INTO RQ_TABLE(COUNTRY,City,DATE_NAME,YEAR,MONTH,WEEK,DAY,QUARTER,FWEEK,Weekend,CREATOR,CREATE_DATE,CREATE_INST)SELECT'中国','郑州',--CONVERT函数将@START_DATE转换成指定的格式CONVERT(CHAR(10),@START_DATE,111) DATE_NAME,--DATENAME获取@START_DATE的年份CONVERT(CHAR(4),DATENAME(YEAR, @START_DATE)) YEAR,--DATENAME获取@START_DATE的月份CONVERT(CHAR(2),DATENAME(MONTH, @START_DATE)) MONTH,--DATENAME获取@START_DATE的星期CONVERT(CHAR(6),DATENAME(WEEKDAY, @START_DATE)) WEEK,--DATENAME获取@START_DATE的日期CONVERT(CHAR(2),DATENAME(DAY, @START_DATE)) DAY,CASEWHEN CONVERT(CHAR(2),DATENAME(MONTH, @START_DATE)) IN('01','02','03') THEN 'Q1'WHEN CONVERT(CHAR(2),DATENAME(MONTH, @START_DATE)) IN('04','05','06') THEN 'Q2'WHEN CONVERT(CHAR(2),DATENAME(MONTH, @START_DATE)) IN('07','08','09') THEN 'Q3'ELSE 'Q4'END AS [季],--国外周日为一周的第一天,周六为一周的最后一天'第' + CONVERT(VARCHAR(2), Datepart(WEEK, @START_DATE)) + '周' AS [周],--判断是否是周末CASEWHEN CONVERT(CHAR(6),DATENAME(WEEKDAY, @START_DATE)) = '星期六' THEN '周末'WHEN CONVERT(CHAR(6),DATENAME(WEEKDAY, @START_DATE)) = '星期日' THEN '周末'ELSE '平时'END AS '是否周末','蓝涩街灯',--获取当前创建日期维度表时间GETDATE() CREATE_DATE,'SQL数据库运维'--插入完成后,对@i进行自加1处理SET @i=@i+1;--更新@START_DATE的值,在原来的基础上使用DATEADD函数增加一天SET @START_DATE=CONVERT(CHAR(10),DATEADD(DAY, 1, @START_DATE),120);ENDEND
三、执行存储过程
--执行存储过程,根据输入的年份生成相对应年份的日历表EXEC PROC_RQ 2021
四、查询执行结果
--查询日历表信息SELECT * FROM RQ_TABLE ORDER BY DATE_NAME ASC
五、结果验证



点击关注“SQL数据库运维”,后台回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
文章转载自SQL数据库运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




