• 締切済み

SQLserverのIF文について

どうしてもIF文がうまくいきません IF文の中にIFを入れ子していますそのIFが複数の条件があります 今までACCESSではELSEIFで条件をいくらでも指定できたのですがSQLの場合はエラーになってしまいます ご教授おねがいします ------------------------------ set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_part端数処理] ( @PTHASU nvarchar(10), @haken nvarchar(10) ) RETURNS real AS BEGIN DECLARE @PARTT real DECLARE @PARTT_H real if (not(@PTHASU is null)) if @haken='派遣' or @haken='臨時' if substring(@PTHASU,4,2)>= 50 SET @PARTT = convert(int,LEFT(@PTHASU,2)+1)*60 --ここをいれるとエラー IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30 --ここをいれるとエラー if substring(@PTHASU,4,2)< 20 --ここをいれるとエラー SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 ELSE SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1 ELSE SET @PARTT= 0 SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000)) RETURN @PARTT_H END

みんなの回答

  • SRL311
  • ベストアンサー率100% (2/2)
回答No.2

こんな感じかな。 if a > b   begin     if b > c       begin         if c > d           begin             set @ABC=1           end         else           begin             set @ABC=2           end       end     else       begin         set @ABC=3       end   end else   begin     set @ABC=4   end

hiyotom
質問者

お礼

すみません SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30のかっこがぬけていていました 以下のように完成できました ありがとうございました -------------------------------- set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER FUNCTION [dbo].[scfc_part端数処理] ( @PTHASU nvarchar(10), @haken nvarchar(10) ) RETURNS real AS BEGIN DECLARE @PARTT real DECLARE @PARTT_H real if (not(@PTHASU is null)) if @haken='派遣' or @haken='臨時' begin if substring(@PTHASU,4,2)>= 50 SET @PARTT = convert(real,LEFT(@PTHASU,2)+1)*60 else IF substring(@PTHASU,4,2)< 50 and substring(@PTHASU,4,2)>= 20 SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 +30 else SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 end ELSE SET @PARTT = convert(real,LEFT(@PTHASU,2))*60 + convert(real,substring(@PTHASU,4,2))*1 ELSE SET @PARTT= 0 SET @PARTT_H = convert(real,(floor(@PARTT/60*10000)/10000)) RETURN @PARTT_H END

回答No.1

マニュアルを読みましょう。 if 条件 真の時の命令文 else 偽の時の命令文 で、真または偽で命令文を2個以上書く場合は、begin~endでブロックを構成する必要があります。

参考URL:
http://msdn2.microsoft.com/ja-jp/library/ms182717.aspx
hiyotom
質問者

お礼

すみません SET @PARTT = convert(int,LEFT(@PTHASU,2)*60 +30のかっこがぬけていていました ありがとうございました

関連するQ&A