给定一组数值,计算给出结果的组合
Given a set of numeric values, calculate the combination that gives the result
我有一个 SQL 服务器查询,每周向我显示 运行 的所有代理作业。我想知道他们 运行 在哪几天。
我有以下查询
SELECT j.name,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 2) -- a job with a daily recurrance or weekly on this day
THEN 1
END AS Monday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 3)
THEN 1
END AS Tuesday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 4)
THEN 1
END AS Wednesday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 5)
THEN 1
END AS Thursday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 6)
THEN 1
END AS Friday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 7)
THEN 1
END AS Saturday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 1)
THEN 1
END AS Sunday,
s.freq_interval
FROM msdb.dbo.sysjobschedules js
JOIN msdb.dbo.sysschedules s
ON js.schedule_id = s.schedule_id
JOIN msdb.dbo.sysjobs j
ON js.job_id = j.job_id
WHERE j.enabled = 1 AND
s.enabled = 1 AND
s.freq_type = 8
s.freq_interval
列是数值组合的总和如下
1 = Sunday
2 = Monday
4 = Tuesday
8 = Wednesday
16 = Thursday
32 = Friday
64 = Saturday
因此,如果作业安排在星期二和星期四 运行,s.freq_interva
l 将为 4+16=20
如果作业安排在周五、周六和周日 运行,则 s.freq_interval 将是 32+64+1=97
如何获取 s.freq_interval 中的值并计算总和为该数字的值的组合?
您可以使用 &
按位运算符来执行此操作:
SELECT *
FROM (VALUES(1 ,'Sunday'),
(2 ,'Monday'),
(4 ,'Tuesday'),
(8 ,'Wednesday'),
(16,'Thursday'),
(32,'Friday'),
(64,'Saturday'))V(FrequencyInt, FrequnecyDay)
JOIN (VALUES(20),(97),(13),(8)) J(Freq) ON V.Frequencyint & J.Freq != 0;
我有一个 SQL 服务器查询,每周向我显示 运行 的所有代理作业。我想知道他们 运行 在哪几天。
我有以下查询
SELECT j.name,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 2) -- a job with a daily recurrance or weekly on this day
THEN 1
END AS Monday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 3)
THEN 1
END AS Tuesday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 4)
THEN 1
END AS Wednesday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 5)
THEN 1
END AS Thursday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 6)
THEN 1
END AS Friday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 7)
THEN 1
END AS Saturday,
CASE
WHEN s.freq_type = 4 OR (s.freq_type = 8 AND freq_interval = 1)
THEN 1
END AS Sunday,
s.freq_interval
FROM msdb.dbo.sysjobschedules js
JOIN msdb.dbo.sysschedules s
ON js.schedule_id = s.schedule_id
JOIN msdb.dbo.sysjobs j
ON js.job_id = j.job_id
WHERE j.enabled = 1 AND
s.enabled = 1 AND
s.freq_type = 8
s.freq_interval
列是数值组合的总和如下
1 = Sunday
2 = Monday
4 = Tuesday
8 = Wednesday
16 = Thursday
32 = Friday
64 = Saturday
因此,如果作业安排在星期二和星期四 运行,s.freq_interva
l 将为 4+16=20
如果作业安排在周五、周六和周日 运行,则 s.freq_interval 将是 32+64+1=97
如何获取 s.freq_interval 中的值并计算总和为该数字的值的组合?
您可以使用 &
按位运算符来执行此操作:
SELECT *
FROM (VALUES(1 ,'Sunday'),
(2 ,'Monday'),
(4 ,'Tuesday'),
(8 ,'Wednesday'),
(16,'Thursday'),
(32,'Friday'),
(64,'Saturday'))V(FrequencyInt, FrequnecyDay)
JOIN (VALUES(20),(97),(13),(8)) J(Freq) ON V.Frequencyint & J.Freq != 0;