2012-02-14 34 views
5

bảng này: sysschedulesCác khoảng thời gian sysschedules của SQL Server được tính như thế nào?

Nếu freq_type là 8 (hàng tuần) sau đó freq_interval là 1,2,4,8,16,32,64 cho Su, M, T, W, Th, F, S.

Nhưng khi freq_type là 32 (tương đối hàng tháng) thì freq_interval là 1,2,3,4,5,6,7,8,9,10 cho Su, M, T, W, Th, F, S, ngày trong tuần, cuối tuần.

Tại sao điều này? Có một số loại tính toán xảy ra để giảm độ phức tạp của truy vấn không?

Nếu có, làm cách nào? (Sry nếu tôi âm thanh tránh khỏi thất bại, việc xây dựng một hệ thống các sự kiện lặp đi lặp lại là tan não của tôi)

Trả lời

5

Nếu freq_type là 8, sau đó công việc có thể xảy ra trên một hoặc nhiều ngày - vì vậy cần phải có một cách để đại diện cho nhiều ngày trong cột freq_interval. Điều này được thực hiện bằng cách gán mỗi ngày một sức mạnh của hai giá trị, và do đó nhiều giá trị có thể được thêm vào với nhau một cách rõ ràng. Ví dụ. cho một cái gì đó xảy ra vào thứ Hai, thứ Tư và thứ Sáu, giá trị sẽ là 2 + 8 + 32 = 42. (Câu hỏi của bạn có giá trị sai được gán cho ngày)

Nếu freq_type là 32, thì chỉ có một tùy chọn được chọn - một ngày ngày trong tuần hoặc ngày, ngày trong tuần hoặc cuối tuần. Vì nhiều giá trị không thể kết hợp, có thể sử dụng một đại diện đơn giản hơn.

+0

Vì vậy, truy vấn để nhận tất cả các sự kiện vào Thứ Ba có thể là SELECT * FROM EventTable WHERE freq_interval = [3 hoặc 4]? Bởi vì 3 nếu freq_type là 32, 4 nếu nó là 8. Đúng? – Chaddeus

+1

Để có được tất cả các sự kiện xảy ra vào thứ ba, bạn sẽ truy vấn 'WHERE (freq_type = 32 AND freq_interval = 3) HOẶC (freq_type = 8 AND freq_interval & 4 = 4) '. Bạn * không nên cố gắng truy vấn 'freq_interval' mà không xem xét' freq_type'. –

+0

Tuyệt vời, có ý nghĩa hoàn hảo. Các sự kiện diễn ra như thế nào vào mỗi Thứ Ba khác (mỗi 2 tuần) được đại diện với mô hình này? Có lẽ 'WHERE (freq_type = 32 AND freq_interval = 3 AND freq_relative_interval = 5)'? freq_relative_interval 1 = Đầu tiên và 4 = Thứ ba. (Sau khi gõ tất cả điều này ra, có vẻ như điều này sẽ không trả lời câu hỏi. Thay vào đó, chỉ trở về mỗi thứ ba đầu tiên và thứ ba ...). Hmm ... – Chaddeus

Các vấn đề liên quan