【发布时间】:2017-06-29 03:51:19
【问题描述】:
我有一段代码用于尝试将其从 Oracle 转换为 Sql Server 的函数:
甲骨文代码:
If nDaysAfter = 0 then
while (IsHoliday(dNextDay) = 1) or (RTrim(To_Char(dNextDay, 'DAY')) in ('SATURDAY','SUNDAY')) Loop
dNextDay := dNextDay + 1;
End Loop;
RETURN dNextDay;
Else dNextDay := dNextDay + 1;
For i in 1..nDaysAfter Loop
while (IsHoliday(dNextDay) = 1) or (RTrim(To_Char(dNextDay, 'DAY')) in ('SATURDAY','SUNDAY')) Loop
dNextDay := dNextDay + 1;
End Loop;
dNextDay := dNextDay + 1;
End Loop;
RETURN dNextDay - 1;
End if;
Sql 服务器代码:
If @nDaysAfter = 0 begin
while (IsHoliday(@dNextDay) = 1) or (RTrim(convert(char,@dNextDay, 'DAY')) in ('SATURDAY','SUNDAY')) Begin
SET @dNextDay = @dNextDay + 1;
End;
RETURN @dNextDay;
End
Else BEGIN
SET @dNextDay = @dNextDay + 1;
Declare i CURSOR for 1..nDaysAfter Loop
while (IsHoliday(@dNextDay) = 1) or (RTrim(convert(char,@dNextDay, 'DAY')) in ('SATURDAY','SUNDAY')) Begin
SET @dNextDay = @dNextDay + 1;
End;
SET @dNextDay = @dNextDay + 1;
Fetch i INTO;
End;
Close i;
Deallocate i;
RETURN @dNextDay - 1;
End
我在转换这一行时遇到问题:Declare i CURSOR for 1..nDaysAfter Loop 它在数字 1 下突出显示。(nDaysAfter 被声明为 Float)
谢谢,我将不胜感激。
【问题讨论】:
-
这个循环在做什么?这听起来像是日历表而不是循环的工作。
-
Oracle 中的游标比 SQL Server 好得多。我会尝试以不同的方式执行此操作,以便您不使用游标。我支持日历表的想法,而不是所有这些函数一遍又一遍地进行相同的计算。
标签: sql-server oracle function loops while-loop