sqlserver求日期

请问大家,已知:

select @@DATEFIRST值为7,表示星期日为一周的第一天

select getdate()-@@DATEFIRST 表示当前日期 往前推7天 的那一天

如何求:

getdate()-@@DATEFIRST这一天,所在那一周,的周五的日期?

即当getdate()为2024-09-06时,getdate()-@@DATEFIRST为2024-08-30,这一天所在周的周五即是2024-08-30

getdate()为2024-09-08时,getdate()-@@DATEFIRST为2024-09-01,这一天所在周的的周五即是2024-09-06

FineReport ran1025 发布于 2024-9-6 15:07
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2024-9-6 15:14(编辑于 2024-9-6 15:30)

DECLARE  @RQ_ NVARCHAR(10)

SET @RQ_='2024-09-08'

set datefirst 1---设置SQL一周从周一开始

SELECT DATEADD(DAY, 5-DATEPART(WEEKDAY,@RQ_),@RQ_)

----------

DECLARE  @RQ_ NVARCHAR(10)

SET @RQ_='2024-09-08'

SELECT DATEADD(DAY,-7,DATEADD(DAY, 6-DATEPART(WEEKDAY,@RQ_),@RQ_))

  • ran1025 ran1025(提问者) 谢谢,不想重新设置datefirst 对别人的代码会有影响
    2024-09-06 15:19 
  • Z4u3z1 Z4u3z1 回复 ran1025(提问者) 不会影响其它的,只影响当前会话
    2024-09-06 15:20 
  • ran1025 ran1025(提问者) 回复 Z4u3z1 想直接使用默认值 datefirst为7 ,怎么能取到@RQ_所在周往前推7天的那周周五的日期呢?
    2024-09-06 15:26 
  • Z4u3z1 Z4u3z1 回复 ran1025(提问者) 等一下我改
    2024-09-06 15:27 
  • Z4u3z1 Z4u3z1 回复 ran1025(提问者) 补充在上面了
    2024-09-06 15:30 
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-9-6 15:13(编辑于 2024-9-6 15:16)

DECLARE @BaseDate DATE = DATEADD(DAY, -@@DATEFIRST + 1, GETDATE()); -- 基准日期:getdate() - @@DATEFIRST + 1(因为@@DATEFIRST是7时表示周日)  

DECLARE @DaysToFriday INT = CASE WHEN DATEPART(WEEKDAY, @BaseDate) = 1 THEN 5 -- 如果是周日,则加5天到周五  

                                 ELSE 6 - DATEPART(WEEKDAY, @BaseDate) -- 否则,计算到周五的天数(注意这里用6减去当前星期几)  

                            END;  

  

-- 计算周五的日期  

DECLARE @FridayDate DATE = DATEADD(DAY, @DaysToFriday, @BaseDate);  

  

SELECT @FridayDate AS FridayDate;

  • 2关注人数
  • 163浏览人数
  • 最后回答于:2024-9-6 15:30
    请选择关闭问题的原因
    确定 取消
    返回顶部