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

今日はSaturday なので@timeIDを 2 に設定する必要があり@timeId=1ます。何が悪いのか助けてください。

select datename(Dw,getdate())

土曜日に戻ります

4

2 に答える 2

4

OK、土曜日だと仮定します。

最初のIFブロックが実行されます。

次に、2 番目のIFブロックが実行されます。これは、 on 、 overwritingというOR条件のためです。!= Sunday@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

2 番目の if 句では、OR ではなく AND を使用する必要があります。毎日が日曜日でも土曜日でもない

于 2012-12-22T04:31:25.493 に答える