SQL中怎么生成一张日期维度表
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,今天就跟大家聊聊有关SQL中怎么生成一张日期维度表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建表结构我们根据常见的日历表来创建一个含有年
千家信息网最后更新 2024年09月21日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安全错误
数据库的锁怎样保障安全
设计软件开发的具体过程
网络技术通识
杂志社数据库下架
厦门做网络技术
尼毕鲁服务器开发工程师
大同大屏互动触摸软件开发公司
阿坝网络技术选择
移动支付网数据库栏目
系统管理服务器标识
如何防止服务器cc
河南早晟互联网科技有限公司
网络安全执法培训学校
监控pc网络安全吗
惠州网络安全工程师招聘
资源管理器中怎么打开服务器
华为服务器如何配置网络
山西东方信达网络技术公司
数据库数据类型的符号
软件开发师英文
服务器热备与冷备区别
群众网络安全教育活动
计算机数据库技术是干啥的
对于软件开发的看法
软件开发人力外包哪家好
部队网络安全保密守则
数据库别名的用处
数据库求和技巧
闲鱼里的服务器
内蒙古软件开发服务价钱
面向大众的网络安全意识