我需要计算作业的下一个每月运行时间,可以使用两个参数指定,这些参数可以从
参数1:
1代表星期日,2代表星期一,3代表星期二,4代表星期三,5代表星期四,6代表星期五,7代表星期六,8代表白天,9代表工作日,10代表周末
参数 2:
1 代表第一,2 代表第二,4 代表第三,8 代表第四,16 代表最后
基于这两个参数,您可以指定运行时间,例如每月的第一个工作日或每月的最后一个星期日。
如何使用知道当前日期、para1 和 para2 的存储过程到达这个日期
我需要计算作业的下一个每月运行时间,可以使用两个参数指定,这些参数可以从
参数1:
1代表星期日,2代表星期一,3代表星期二,4代表星期三,5代表星期四,6代表星期五,7代表星期六,8代表白天,9代表工作日,10代表周末
参数 2:
1 代表第一,2 代表第二,4 代表第三,8 代表第四,16 代表最后
基于这两个参数,您可以指定运行时间,例如每月的第一个工作日或每月的最后一个星期日。
如何使用知道当前日期、para1 和 para2 的存储过程到达这个日期
create function schema.get_next_run_date(@day int, @week int)
returns datetime
as
begin
declare @rtResult datetime
declare @frstDayOfMonth datetime
set @frstDayOfMonth = SELECT TRUNC(current_date, 'MM') FROM dual
if @day <= 7
set @rtResult = SELECT NEXT_DAY(@frstDayOfMonth + ((parm2-1)*7) day, param1) "NEXT DAY" FROM DUAL
else if @day = 8
set @rtResult = SELECT NEXT_DAY(@frstDayOfMonth + pamr2) "NEXT DAY" FROM DUAL
else if @day = 9
declare intDay int
set @intDay = datepart(weekday, @frstDayOfMonth)
if (@intDay between 2 and 6)
set @rtResult = @frstDayOfMonth
else if (@intDay = 1)
set @rtResult = @frstDayOfMonth + 1 day
else
set @rtResult = @frstDayOfMonth + 2 day
else if @day = 10
declare intDay int
set @intDay = datepart(weekday, @frstDayOfMonth)
if (@intDay between 2 and 6)
set @rtResult = @frstDayOfMonth + 7 - @intDay
else
set @rtResult = @frstDayOfMonth
else
set @rtResult = null
return @rtResult
end
go
未测试。但我希望这会有所帮助。如果日期已经过期,您可能希望返回 null。
这可能会让你开始。取自:如何获得一个月的第 N 个工作日
CREATE FUNCTION dbo.fnGetNthWeekdayOfMonth
(
@theDate DATETIME,
@theWeekday TINYINT,
@theNth SMALLINT
)
RETURNS DATETIME
BEGIN
RETURN (
SELECT theDate
FROM (
SELECT DATEADD(DAY, 7 * @theNth - 7 * SIGN(SIGN(@theNth) + 1) +(@theWeekday + 6 - DATEDIFF(DAY, '17530101', DATEADD(MONTH, DATEDIFF(MONTH, @theNth, @theDate), '19000101')) % 7) % 7, DATEADD(MONTH, DATEDIFF(MONTH, @theNth, @theDate), '19000101')) AS theDate
WHERE @theWeekday BETWEEN 1 AND 7
AND @theNth IN (-5, -4, -3, -2, -1, 1, 2, 3, 4, 5)
) AS d
WHERE DATEDIFF(MONTH, theDate, @theDate) = 0
)
END
这不完全是您正在寻找的,但应该涵盖主要部分。