SQL 已知周天,周,年转换为具体的日期



   前两天突然冒出通过已知周天,周,年转换为具体日期的想法,花了大概一个小时琢磨了一下。这也是从事数据库这份工作的第三个年头,每天Select ,Update,Delete 表中的数据,然后就是 Alert 、Create PROCEDURE\View 来满足内、外部业务上的需求;同时这也是我的第一份博客,如有不准确的地方欢迎指出,详细代码如下勿喷。



CREATE FUNCTION [dbo].[WeekDayAndWeekChangeDate]
    (
      @WeekDay INT ,--周天 1-7 星期天=1 以此类推
      @Week INT ,--周 一年最多为52周
      @Year NVARCHAR(4) --年
    )
RETURNS NVARCHAR(50)
AS
BEGIN
 DECLARE @StartDate DATETIME = CONVERT(DATETIME,@Year + '-01-01') --每的第一天
 DECLARE @Num INT --每年第一天的周天
 DECLARE @Date DATETIME
 DECLARE @Message NVARCHAR(50)

 SET @Num = DATEPART(WEEKDAY,@StartDate)

 IF ISNULL(@WeekDay,0) < 0 OR ISNULL(@WeekDay,0) > 7
  BEGIN
   
   SET @Message = 'WeekDay 必须大于0 小于 8.'
   RETURN @Message
  END

 IF ISNULL(@Week,0) > 52
  BEGIN
   SET @Message = 'Week 必须大于0 小于 52'
   RETURN @Message
  END


 --DATEADD(DD,@Week * 7,@StartDate):算[****-01-01]第一周第一天为周天1的最大日期
 --DATEADD(DD,-(@Num),DATEADD(DD,@Week * 7,@StartDate)): 算实际当前周的最大日期
 --DATEADD(DD,(-7+@WeekDay) ,DATEADD(DD,-(@Num),DATEADD(DD,@Week * 7,@StartDate))):把当前周最大日期向后推一周,然后在加上当前周天

 SET @Date=DATEADD(DD,(-7+@WeekDay) ,DATEADD(DD,-(@Num),DATEADD(DD,@Week * 7,@StartDate)))

 RETURN CONVERT(NVARCHAR(20),@Date,120)
END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值