【问题标题】:if condition which executes only on weekdays, i.e. mon-friif 仅在工作日执行的条件,即周一至周五
【发布时间】:2016-03-21 10:47:50
【问题描述】:

我想要一个只在工作日执行的条件, 变量@Executedate 是int 类型,只占用日期时间的天部分,如果@Executeday 是星期六或星期日,则应将其重置为星期一。

这是一段代码,

Declare @Executeday int      

declare @time varchar(200)

set @time =  convert(varchar(8), getdate(), 108)

if day(getdate()) < 16                          
begin 

set @Executeday = (select top 1 Description from cts_configuration(nolock) where name like 'ReminderMailerFirstFortNightDay')

end
else                          
begin         
set @Executeday = (select top 1 Description from cts_configuration(nolock) where name like 'ReminderMailerSecondFortNightDay')

 end

if (day(getdate())=@Executeday) or (day(getdate())=@Executeday+2) or (day(getdate())=@Executeday+4)

begin

if(@time between '10:00:00' and '11:00:00') 
begin

我想要这里的 if 条件...(如果是星期六或太阳,则将 @executeday 重置为星期一)

【问题讨论】:

  • 什么是“day part”、“monday”或“21st”?你已经尝试过了吗?
  • 这里是代码。它将每周执行 3 次,隔天执行,如果任何一天是星期六或星期日,@Executeday 会被重置为下周的星期一

标签: sql sql-server sql-server-2012


【解决方案1】:
DECLARE @ExecuteDay AS int = 7;

DECLARE @Today AS date = GETDATE();
DECLARE @ExecuteDate AS date = DATEADD(day, @ExecuteDay - DATEPART(day, @Today), @Today);
DECLARE @WeekDay AS int = (@@DATEFIRST + DATEPART(WEEKDAY, @ExecuteDate)) % 7;

IF @WeekDay IN (0, 1)
    SET @ExecuteDate = DATEADD(day, 2 - @WeekDay, @ExecuteDate)

PRINT @ExecuteDate

【讨论】:

    猜你喜欢
    • 2020-12-07
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多