gpt4 book ai didi

SQL Server 2005 Bitwise 下一天是哪一天?

转载 作者:行者123 更新时间:2023-12-01 04:07:10 26 4
gpt4 key购买 nike

我有一个名为 Jobs 的表,用于跟踪作业及其下一次运行时间。一个特定的调度选项允许作业每周运行几次。我使用按位比较来辨别下一天是哪一天(嗯......无论如何我都在尝试。)例如。我有一张这样的 table 。。

JobID    NextRunTime     DaysOfWeek
1 12-26-2011 21

我的按位枚举是这样的..
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64.

所以我们知道这个工作应该在周一、周三、周五运行。 (12-26-2011) 是星期一,所以当它更新时,它应该在 12-28-2011 再次运行,但我无法想出一种算法来允许我以编程方式设置新的 NextRunTime。

这是我目前正在尝试使用一些伪代码来解决我遇到的问题的方法..
IF OBJECT_ID('tempdb..#DaysSchedule') IS NOT NULL DROP TABLE #DaysSchedule
CREATE TABLE #DaysSchedule
(
Monday int, Tuesday Int, Wednesday Int, Thursday INT, Friday INT, Saturday INT, Sunday INT
)
INSERT INTO #DaysSchedule (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday)
Values(21 & 1,21 & 2,21 & 4,21 & 8,21 & 16 ,21 & 32,21 & 64)

这给了我们一个看起来像这样的表:
Monday    Tuesday    Wednesday    Thursday    Friday    Saturday    Sunday
1 0 4 0 16 0 0

从这里开始,(半)伪代码很容易。
for (int i=1; i<7, i++)
{
thisDay = DATENAME(dw, DATEADD(day, i, nextRunTime)) -- we add one day
if (column named thisDay contains a value > 0) -- if that days value > 0
begin
We add the difference of thisDay to NextRunTime to NextRunTime and we're done.
end
}

最佳答案

注意:我不打算评论在单个字段中表示多个数据项的想法。在这种情况下它可能合适也可能不合适,我只是在评论如何使这种想法发挥作用。

您面临的问题是信息实际上与其用途并不完全匹配。

目前...
- 从 NextRunTime 中提取 DAY
- 确定代表那天的 BIT
- 搜索下一位设置为 1,如有必要,循环到开始
- 确定在该搜索中行驶的距离
- 将该距离添加到 NextRunTime

它只是不高效或简单。

我建议改为记录要添加到下一个计划日期的天数。

例子:

-----15 = Saturday and Sunday Only  
1111111 = Every Day
11113-- = Every Weekday
2-2-3-- = Monday, Wednesday, Friday

这将算法更改为...
- 从 NextRunTime 中提取 DAY
- 识别该位置的角色
- 将其转换到 INT
- 将那么多天添加到 NextRunTime

这避免了搜索和计数部分,将其替换为直接查找。

它确实允许“死胡同”或更复杂的计划。根据您的情况,这可能是优势或劣势...
1111100 = Every weekday for a week, then stop
2222222 = Every other day, on a two week cycle

关于SQL Server 2005 Bitwise 下一天是哪一天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8591810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com