3

我的程序中有一个if else障碍。@timeID根据今天的日期在此块中设置 临时变量的值。

declare @timeId int
if(datename(Dw,getdate())='Sunday' or datename(Dw,getdate())='Saturday')
begin
  set @timeId=2
end

if(datename(Dw,getdate())!='Sunday' or datename(Dw,getdate())!='Saturday')
begin
 if(convert(varchar(11),getdate(),108)<='08:30:00')
  begin
   set @timeId=0
  end
 else
  begin
   set @timeId=1
  end
end


select @timeId as TimeID

由于今天是星期六@timeID必须设置为 2。但输出显示@timeId=1我的程序导致错误的结果。请帮忙看看有什么问题。

select datename(Dw,getdate())

周六返回

4

2 回答 2

4

好的,假设是星期六:

第一个IF块运行。

然后第二个IF块由于OR条件 on != Sunday, overwriting而运行@timeid

你想要一个 ELSE(事实上,你可以放弃额外的测试,简化代码):

declare @timeId int
if(datename(Dw,getdate())='Sunday' or datename(Dw,getdate())='Saturday')
begin
  set @timeId=2
end

ELSE

begin
 if(convert(varchar(11),getdate(),108)<='08:30:00')
  begin
   set @timeId=0
  end
 else
  begin
   set @timeId=1
  end
end
于 2012-12-22T04:26:22.487 回答
3

您的第二个 if 子句应该使用 AND,而不是 OR。每天不是星期天也不是星期六

于 2012-12-22T04:31:25.493 回答