ms sql 生成日历储存过程

SQL 生成日历

create PROCEDURE GetMonthTable
(
    @Date datetime
)
AS
BEGIN
    DECLARE @Start DATETIME,@End DATETIME
    DECLARE @Index INT
    SET @Start = DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)
    SET @End = DATEADD(MONTH,1,@Start)
    SET @Index = DATEDIFF(DAY,-1,@Start)%7 - 1;
    SET @Start = DATEADD(mm,DATEDIFF(mm,0,@Date),0) 
    SET    @End = DATEADD(mm,1,@Start) - 1
    SET    @Index= DATEDIFF(day,0,@Start)%7

    ;WITH temp(date,row,col) AS
    (
        SELECT date=1,row=@Index/7+1,col=@Index%7+1
        UNION ALL
        SELECT date=date+1,row=(@Index+date)/7+1,col=(@Index+date)%7+1
        FROM temp 
        WHERE date <= DATEDIFF(DAY,@Start,@End)
    )
    SELECT    ISNULL(CONVERT(CHAR(2),[1]),'') AS 一,
            ISNULL(CONVERT(CHAR(2),[2]),'') AS 二,
            ISNULL(CONVERT(CHAR(2),[3]),'') AS 三,
            ISNULL(CONVERT(CHAR(2),[4]),'') AS 四,
            ISNULL(CONVERT(CHAR(2),[5]),'') AS 五,
            ISNULL(CONVERT(CHAR(2),[6]),'') AS 六,
            ISNULL(CONVERT(CHAR(2),[7]),'') ASFROM temp
    PIVOT
    (    
        MAX(date) FOR col IN ([1],[2],[3],[4],[5],[6],[7])
    ) AS B
END
GO

 

posted @ 2021-01-08 15:36  星火卓越  阅读(162)  评论(0编辑  收藏  举报