如何用SQL生成一張日期維度表?
?問題描述
輸入想要生成日歷的年份,通過調(diào)用存儲過程,即可生成該年的全部日歷。
創(chuàng)建表結(jié)構(gòu)
我們根據(jù)常見的日歷表來創(chuàng)建一個含有年,月,日,星期的日歷表,具體表結(jié)構(gòu)如下:
上面的表結(jié)構(gòu)中我們將年、月、星期、日等都按照日歷的形式顯示成單獨的列,末尾還添加了兩個默認值,一個是刪除標志,默認為0表示不刪除,1表示刪除,時間戳取系統(tǒng)時間。
創(chuàng)建存儲過程
要調(diào)用參數(shù),一般使用存儲過程來傳參。下面我們根據(jù)需求創(chuàng)建一個存儲過程。
我們傳遞進一個INT型的參數(shù)給存儲過程,表示年份,然后取這一年有多少天,從1月1日循環(huán)累加到12月31日,并將每天的相關信息都插入到表中,這樣一整年的完整日歷就完成了。
下面我們在SQL Server環(huán)境下開始寫這個存儲過程吧。
為了方便閱讀,已經(jīng)在每行代碼上方添加了注釋。對SQL系統(tǒng)函數(shù)不熟悉的可以搜索一下相關函數(shù)的用法。
調(diào)用存儲過程
驗證結(jié)果
執(zhí)行完后我們查詢一下表CALENDAR_INFO里的數(shù)據(jù)
結(jié)果:
翻一下日歷表,2021-01-01這一天是星期五,說明我們寫的日歷表是正確的。
細心的朋友不知有沒有發(fā)現(xiàn),日歷表中缺少中國農(nóng)歷,感興趣的小伙伴可以思考一下該如何寫農(nóng)歷的部分。?