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');
--定義一年的結束日期
SET @END_DATE = CONCAT(@YEAR+1,'-01-01');
--如果表已經存在要新建的日歷,則先刪除
DELETE FROM CALENDAR_INFO WHERE YEAR = @YEAR;
--計算開始到結束日期一共有多少天,DATEDIFF函數(shù)計算日期的間隔天數(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轉換成指定的格式
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函數(shù)增加一天
SET @START_DATE=CONVERT(CHAR(10),DATEADD(DAY, 1, @START_DATE),120);
END
END