SQL中怎么生成一张日期维度表
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天就跟大家聊聊有关SQL中怎么生成一张日期维度表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建表结构我们根据常见的日历表来创建一个含有年
千家信息网最后更新 2025年11月07日SQL中怎么生成一张日期维度表
今天就跟大家聊聊有关SQL中怎么生成一张日期维度表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创建表结构
我们根据常见的日历表来创建一个含有年,月,日,星期的日历表,具体表结构如下:
CREATE TABLE CALENDAR_INFO ( COUNTRY VARCHAR(5),--'国家' CDR_CODE VARCHAR(5) ,--'日历代码' DATE_NAME VARCHAR(20) ,--'日期名称' YEAR CHAR(4),--'年' MONTH CHAR(2),--'月' WEEK CHAR(6),--'星期' DAY CHAR(2),--'日' CDR_DATE CHAR(10),--'日历日期' CREATOR VARCHAR(32),--'创建人' CREATE_DATE DATETIME ,--'创建日期' CREATE_INST VARCHAR(20),--'创建机构' DEL_FLAG CHAR(1) DEFAULT 0 ,--'删除标志' 0:不删除,1:已删除 TS DATETIME DEFAULT GETDATE()--'时间戳' )
上面的表结构中我们将年、月、星期、日等都按照日历的形式显示成单独的列,末尾还添加了两个默认值,一个是删除标志,默认为0表示不删除,1表示删除,时间戳取系统时间。
创建存储过程
要调用参数,一般使用存储过程来传参。下面我们根据需求创建一个存储过程。
我们传递进一个INT型的参数给存储过程,表示年份,然后取这一年有多少天,从1月1日循环累加到12月31日,并将每天的相关信息都插入到表中,这样一整年的完整日历就完成了。
下面我们在SQL Server环境下开始写这个存储过程吧。
CREATE PROC PROC_CALENDAR(@YEAR INT ) AS BEGIN DECLARE @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 CALENDAR_INFO WHERE YEAR = @YEAR; --计算开始到结束日期一共有多少天,DATEDIFF函数计算日期的间隔天数 SET @DATE_COUNT = DATEDIFF(DAY,@START_DATE,@END_DATE); --建立循环,条件是@i小于一年的天数 WHILE @i < @DATE_COUNT BEGIN INSERT INTO CALENDAR_INFO (COUNTRY,CDR_CODE,DATE_NAME, YEAR,MONTH,WEEK,DAY,CDR_DATE,CREATOR,CREATE_DATE,CREATE_INST) SELECT 'CN', 'CN01', --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, CONVERT(CHAR(10),@START_DATE,120) CDR_DATE, '平凡世界', GETDATE() CREATE_DATE, 'Lyven' --插入完成后,对@i进行自加1处理 SET @i=@i+1; --更新@START_DATE的值,在原来的基础上使用DATEADD函数增加一天 SET @START_DATE=CONVERT(CHAR(10),DATEADD(DAY, 1, @START_DATE),120); END END
为了方便阅读,已经在每行代码上方添加了注释。对SQL系统函数不熟悉的可以搜索一下相关函数的用法。
调用存储过程
EXEC PROC_CALENDAR 2021
验证结果
执行完后我们查询一下表CALENDAR_INFO里的数据
SELECT * FROM CALENDAR_INFO
结果:
翻一下日历表,2021-01-01这一天是星期五,说明我们写的日历表是正确的。

看完上述内容,你们对SQL中怎么生成一张日期维度表有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
日期
日历
函数
过程
存储
星期
日历表
内容
年份
时间
结构
维度
生成
代码
参数
天数
月份
标志
系统
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
广州乐资互联网科技
sql数据库用户数
软件开发过程中的幂等性有哪些
中国工业互联网中天科技
怎么从微信打开连接数据库
阿里云服务器做网站安全吗
腾讯云服务器的密码
网络安全微视频词
毕马威网络安全保险预测
软件开发效率一般值
武夷山导航软件开发
5g时代网络安全试点
企业定制管理软件开发商
官兵网络安全自查自纠
统筹兼顾网络安全
用友数据库安装教程
富士通服务器阵列卡驱动
服务器推送代码为什么推送不成功
c 如何保存到数据库
会数据库的就会开发
mysql恢复数据库的表
学完网络安全能干什么
mcpe 服务器
sql数据库用户数
山东大学数据库实验6
奉贤区辅助软件开发售后服务
浦项大连软件开发
四川违反网络安全法第一案
官兵网络安全自查自纠
人大机关抓好网络安全