Sql 给定一组数值,计算得出结果的组合
我有一个SQL Server查询,显示每周运行的所有代理作业。我想知道它们在哪几天运行 我有以下疑问Sql 给定一组数值,计算得出结果的组合,sql,math,combinations,sql-server-2014,Sql,Math,Combinations,Sql Server 2014,我有一个SQL Server查询,显示每周运行的所有代理作业。我想知道它们在哪几天运行 我有以下疑问 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 Monda
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_间隔将为4+16=20
如果作业计划在周五、周六和周日运行,则s.freq_间隔将为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;
谢谢-将此应用于我的解决方案