2012-02-14 61 views
5

该表:sysschedules如何计算SQL Server sysschedules间隔?

如果freq_type是8(每周)然后freq_interval是1,2,4,8,16,32,64苏,M,T,W,Th时,F,S。

但是当freq_type为32(月度相对)时,那么freq_interval对于Su,M,T,W,Th,F,S等于1,2,3,4,5,6,7,8,9,10。周日,周末。

这是为什么?是否进行某种计算来降低查询复杂性?

如果是这样,怎么样? (SRY如果我听起来毫无章法,建立经常性的事件系统是融化了我的大脑)

回答

5

如果freq_type是8,那么可以在一个或多个天发生的工作 - 所以,需要有表示多天的方式在freq_interval列中。这是通过每天分配两个值的幂来完成的,因此可以明确地将多个值加在一起。例如。对于星期一,星期三和星期五发生的事情,值将是2 + 8 + 32 = 42.(您的问题的日期分配有错误的值)

如果freq_type是32,那么只有一个选项可以选择 - 一个一周中的某一天,或一天,一周或周末。由于多个值不能组合,因此可以使用更简单的表示法。

+0

因此,在星期二获取所有事件的查询可以是SELECT * FROM EventTable WHERE freq_interval = [3或4]?因为如果freq_type是32则为3,如果是8,则为4。 – Chaddeus 2012-02-14 09:54:39

+1

要获取星期二发生的所有事件,请查询WHERE(freq_type = 32 AND freq_interval = 3)或(freq_type = 8 AND freq_interval&4 = 4)'。你*不应该试图在不考虑'freq_type'的情况下查询'freq_interval'。 – 2012-02-14 10:29:07

+0

太棒了,这很有道理。这种模式代表了每隔周二(每2周)发生一次的事件是如何发生的?也许'WHERE(freq_type = 32 AND freq_interval = 3 AND freq_relative_interval = 5)'? freq_relative_interval 1 =第一个,4 =第三个。 (输入完所有内容后,似乎不会回答这个问题,而是只返回每个第一个星期二和第三个星期二......)。嗯... – Chaddeus 2012-02-14 11:09:10