プロが教えるわが家の防犯対策術!

どうしても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

A 回答 (2件)

マニュアルを読みましょう。



if 条件
真の時の命令文
else
偽の時の命令文

で、真または偽で命令文を2個以上書く場合は、begin~endでブロックを構成する必要があります。

参考URL:http://msdn2.microsoft.com/ja-jp/library/ms18271 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/04/24 21:05

こんな感じかな。


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
    • good
    • 1
この回答へのお礼

すみません
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

お礼日時:2007/04/24 21:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A