SQL Server一个打印日历的函数

本文介绍了一个SQL函数,用于生成指定年的月历表格,包括月份、周数及每周各天的最大日期。通过该函数,可以方便地查看整年的日历布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE FUNCTION PrintCalendar(@Year CHAR(4))
RETURNS
 @Calendar TABLE
 (
  [Month] VARCHAR(20),
  WeekNum CHAR(2),
  Sun INT,
  Mon INT,
  Tues INT,
  Wed INT,
  Thur INT,
  Fri INT,
  Sat INT
 )
AS
BEGIN
 DECLARE @FirstDayOfYear DATETIME
 SET @FirstDayOfYear = CONVERT(DATETIME, @Year+'-01-01')
 
 INSERT INTO @Calendar([Month],WeekNum, Sun, Mon, Tues, Wed, Thur, Fri, Sat )
 SELECT
  DATENAME(MONTH,DATEADD(DAY,number,@FirstDayOfYear)),
  DATEPART(week,dateadd(DAY,number,@FirstDayOfYear)) week_num,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 1
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
     END
   ) AS Sunday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 2
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
   END) AS Monday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 3
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
            END) AS Tuesday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 4
     THEN DATEPART(DAY,DATEADD(DAY,NUMBer,@FirstDayOfYear))
   END) AS Wednesday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 5
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
   END) AS Thursday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 6
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
   END) AS Friday,
  MAX(CASE WHEN DATEPART(DW,DATEADD(DAY,number,@FirstDayOfYear)) = 7
     THEN DATEPART(DAY,DATEADD(DAY,number,@FirstDayOfYear))
   END) AS Saturday
 FROM master..spt_values
 WHERE TYPE ='P'
  AND DATEPART(YEAR,DATEADD(DAY,number,@FirstDayOfYear)) = @Year
 GROUP BY DATENAME(MONTH,DATEADD(DAY, number, @FirstDayOfYear)),
    DATEPART(MONTH,DATEADD(DAY, number, @FirstDayOfYear)),
    DATEPART(WEEK,DATEADD(DAY, number, @FirstDayOfYear))
 ORDER BY DATEPART(MONTH,DATEADD(DAY, number, @FirstDayOfYear)),
    DATEPART(WEEK, DATEADD(DAY, number, @FirstDayOfYear))
 
 RETURN
END

GO

--使用

select * from dbo.PrintCalendar(2010)

--@Year 的范围从1753-9999

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值