如何在TSQL中实现后向调度

时间:2017-03-31 19:44:15

标签: sql-server tsql

如何使用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天的日期。第三个输入是可选的;如果提供,它必须是其中之一 年,月,日,小时或分钟。如果没有提供,将假设天数。

1 个答案:

答案 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