成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何用SQL生成一張日期維度表?

數(shù)據(jù)庫 其他數(shù)據(jù)庫
我們傳遞進(jìn)一個INT型的參數(shù)給存儲過程,表示年份,然后取這一年有多少天,從1月1日循環(huán)累加到12月31日,并將每天的相關(guān)信息都插入到表中,這樣一整年的完整日歷就完成了。

?問題描述

輸入想要生成日歷的年份,通過調(diào)用存儲過程,即可生成該年的全部日歷。

創(chuàng)建表結(jié)構(gòu)

我們根據(jù)常見的日歷表來創(chuàng)建一個含有年,月,日,星期的日歷表,具體表結(jié)構(gòu)如下:

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),--'創(chuàng)建人'
CREATE_DATE DATETIME ,--'創(chuàng)建日期'
CREATE_INST VARCHAR(20),--'創(chuàng)建機(jī)構(gòu)'
DEL_FLAG CHAR(1) DEFAULT 0 ,--'刪除標(biāo)志' 0:不刪除,1:已刪除
TS DATETIME DEFAULT GETDATE()--'時間戳'
)

上面的表結(jié)構(gòu)中我們將年、月、星期、日等都按照日歷的形式顯示成單獨(dú)的列,末尾還添加了兩個默認(rèn)值,一個是刪除標(biāo)志,默認(rèn)為0表示不刪除,1表示刪除,時間戳取系統(tǒng)時間。

創(chuàng)建存儲過程

要調(diào)用參數(shù),一般使用存儲過程來傳參。下面我們根據(jù)需求創(chuàng)建一個存儲過程。

我們傳遞進(jìn)一個INT型的參數(shù)給存儲過程,表示年份,然后取這一年有多少天,從1月1日循環(huán)累加到12月31日,并將每天的相關(guān)信息都插入到表中,這樣一整年的完整日歷就完成了。

下面我們在SQL Server環(huán)境下開始寫這個存儲過程吧。

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函數(shù)將年份和月份日期拼接起來
SET @START_DATE= CONCAT(@YEAR, '-01-01');
--定義一年的結(jié)束日期
SET @END_DATE = CONCAT(@YEAR+1,'-01-01');
--如果表已經(jīng)存在要新建的日歷,則先刪除
DELETE FROM CALENDAR_INFO WHERE YEAR = @YEAR;
--計(jì)算開始到結(jié)束日期一共有多少天,DATEDIFF函數(shù)計(jì)算日期的間隔天數(shù)
SET @DATE_COUNT = DATEDIFF(DAY,@START_DATE,@END_DATE);

--建立循環(huán),條件是@i小于一年的天數(shù)
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函數(shù)將@START_DATE轉(zhuǎn)換成指定的格式
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進(jìn)行自加1處理
SET @i=@i+1;
--更新@START_DATE的值,在原來的基礎(chǔ)上使用DATEADD函數(shù)增加一天
SET @START_DATE=CONVERT(CHAR(10),DATEADD(DAY, 1, @START_DATE),120);
END
END

為了方便閱讀,已經(jīng)在每行代碼上方添加了注釋。對SQL系統(tǒng)函數(shù)不熟悉的可以搜索一下相關(guān)函數(shù)的用法。

調(diào)用存儲過程

EXEC PROC_CALENDAR 2021

驗(yàn)證結(jié)果

執(zhí)行完后我們查詢一下表CALENDAR_INFO里的數(shù)據(jù)

SELECT * FROM CALENDAR_INFO

結(jié)果:

圖片

翻一下日歷表,2021-01-01這一天是星期五,說明我們寫的日歷表是正確的。

圖片

細(xì)心的朋友不知有沒有發(fā)現(xiàn),日歷表中缺少中國農(nóng)歷,感興趣的小伙伴可以思考一下該如何寫農(nóng)歷的部分。?

責(zé)任編輯:武曉燕 來源: SQL數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2021-02-09 17:21:55

SQL數(shù)據(jù)庫存儲

2021-02-19 08:13:44

SQL日期維度表

2022-08-19 14:46:16

視覺框架

2020-06-15 08:54:46

架構(gòu)圖 EA業(yè)務(wù)建模

2020-08-06 08:00:51

數(shù)據(jù)分頁優(yōu)化

2019-03-18 15:00:48

SQLJoin用法數(shù)據(jù)庫

2019-09-11 10:12:12

華為

2021-02-07 09:01:10

Java并發(fā)編程

2013-12-16 10:59:52

WiFi上鎖WiFi被盜

2021-02-02 21:50:31

MySQL 8.0ExcelMySQL 5.7

2021-11-22 10:38:23

架構(gòu)運(yùn)維技術(shù)

2022-01-04 08:21:53

操作系統(tǒng)內(nèi)存

2024-07-29 16:37:41

教育數(shù)字化

2015-03-10 10:15:27

AppleWatch開發(fā)Swift

2020-11-18 07:51:15

MySQL數(shù)據(jù)查詢

2020-06-22 08:23:42

阿里技術(shù)架構(gòu)圖

2020-09-09 08:30:42

內(nèi)網(wǎng)隱蔽端口

2012-07-13 09:54:14

2011-08-17 09:38:11

windows7驅(qū)動

2024-11-06 08:49:46

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: www日本高清 | 亚洲精品3 | 欧美精品一区二区三区在线 | 我爱操| 欧美日韩久久精品 | 国产成人99久久亚洲综合精品 | 色天天综合 | 4h影视 | 三级免费毛片 | a级片播放 | 91久久国产综合久久 | 97国产精品 | 日韩免费一区二区 | 蜜桃视频在线观看免费视频网站www | 精品网| 成人免费区一区二区三区 | av在线免费观看网址 | 中文字幕在线视频观看 | 日本不卡一区二区三区 | 精品香蕉一区二区三区 | 国产片侵犯亲女视频播放 | 午夜影院黄 | 国产一级免费视频 | 成人免费视频7777777 | 成人中文网 | 亚洲一区 中文字幕 | 91精品国产91 | 男女羞羞视频在线看 | 中文字幕一区在线 | 成年人网站免费视频 | 免费一区二区三区 | 久久久久久高清 | 国产日韩欧美在线观看 | 福利网址 | 成人小视频在线观看 | 久久精品视频一区二区 | 黄片毛片免费观看 | 欧美成人免费在线视频 | 欧美黄色网络 | 亚洲欧美自拍偷拍视频 | 中文字幕一区二区三区四区 |