2012-02-14 62 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