SQL中怎么生成一张日期维度表
发表于:2024-12-13 作者:千家信息网编辑
千家信息网最后更新 2024年12月13日,今天就跟大家聊聊有关SQL中怎么生成一张日期维度表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。创建表结构我们根据常见的日历表来创建一个含有年
千家信息网最后更新 2024年12月13日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安全错误
数据库的锁怎样保障安全
step5软件开发测试
ibm3550服务器安装显卡
计算机三级数据库试题
网络安全问题可以解决
服务器安装操作系统
转换数据库
数据库开启事务
瑞虎8酷我音乐服务器错误
数据库表缺失
自动驾驶网络安全龙头
云数据库同步
读取数据库中的数据有哪些方法
网络安全班会结束总结
网页数据库能否导出来
内蒙古网络安全等级测评费用
方舟服务器有几万护甲值的装备
软件开发应具备的素质
dz论坛数据库修改
数据库类的测试
软件开发工资高还是软件测试高
基于服务器网络
遵义上鹿互联网科技
网络安全法泄露信息多少条获刑
winxray服务器获取失败
用u盘和路由器搭建网络服务器
mysql 数据库慢
新乡鼎裕网络技术有限公司
电脑sql无法连接服务器
刀片服务器运维报告
软件开发公司是外包公司吗