如何使用TSQL创建后向调度。在我的旧系统中,我有类似的东西。是否可以使用TSQL实现相同的逻辑?
字段名称:A-NEST BY
这是A-NEST BY
的公式。注意[A-CUT BY]是日期字段
IF(工作日(datesub(A-CUT BY,7))= 7,datesub(datesub(A-CUT BY,7),1), if(weekday(datesub(A-CUT BY,7))= 1,datesub(datesub(A-CUT BY,7),2), datesub(A-CUT BY,7)))
[A-CUT BY]是计算日期字段,如果日期是第7个日期或星期六将日程表移动到星期五,则在此处的第一行IF(weekday(datesub(A-CUT BY, 7)) = 7, datesub(datesub(A-CUT BY, 7),1),
。如果周日或1日将时间表移至星期一
工作日(日期)或工作日(日期,格式):
返回日期的星期几。第二个输入是可选的,但如果给出必须是" number"之一, " name",或" abbrev"。如果"数字"或者省略,结果将是一个数字,其中1表示星期日,2表示 周一,周六最多7点。如果" name",结果将是单词Sunday,Monday等。如果" abbrev", 结果将是Sun,Mon等词。
datesub(date,N)或datesub(date,N,unit):
从日期减去N天,即返回输入日期前N天的日期。如果N是负数,那么 将返回输入日期后N天的日期。第三个输入是可选的;如果提供,它必须是其中之一 年,月,日,小时或分钟。如果没有提供,将假设天数。
答案 0 :(得分:3)
我在这里完全猜测,因为这个问题没有任何明确性。我想你只想使用一个case表达式。这是我认为你可能想要的一个例子。
set datefirst 7 --Sunday
declare @ACUTBY datetime = getdate()
select
case datepart(WEEKDAY, @ACUTBY)
when 1 then 2
when 7 then 5
else datepart(WEEKDAY, @ACUTBY)
end as [A-CUT BY]
- 编辑 -
SqlZim提出了一个很好的建议,即添加datefirst以避免在使用其他语言时出现任何问题,或者出于某种原因更改了一周的第一天。
您可以在此处详细了解DATEFIRST。 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-datefirst-transact-sql