2013-04-09 20 views
7

私はelse ifステートメントのネストの結果に応じて '0'または '1'を返す関数を作成しています。 MSSQLの使用。else ifステートメントのネストされました

ALTER FUNCTION udf_check_names_starting_with_quotationmark 
(@string NVARCHAR(100)) 
RETURNS INT 
AS 
BEGIN 
    DECLARE @condition INT 
    SET @string = LTRIM(@string) 
    SET @string = RTRIM(@string) 

    IF (PATINDEX('"%', @string) !=0) 
    BEGIN 
     SET @condition = 1 
    END 
    ELSE IF (PATINDEX('%"%', @string) !=0) 
    BEGIN 
     SET @condition=1 
    END 
    ELSE IF (PATINDEX('%"', @string) !=0) 
    BEGIN 
     SET @condition = 1 
    END 
    ELSE 
    BEGIN 
     SET @condition=0 
    END 
    RETURN @condition 
END 

これですべてがうまくいきます。これを達成するためのよりよい方法がありますか(私はORを使用しようとしましたが、ORを認識しないエラーを示すSQLエディタを使用しました)。

答えて

6
SET @condition = (case when PATINDEX('"%', @string) !=0 or 
          PATINDEX('%"%', @string) !=0 or 
          PATINDEX('%"', @string) !=0 then 1 else 0 end) 
+0

感謝しています?あなたはこのヘルプのために非常に..私はケースで遊んでいたが、それは働くことができなかった、私の悪い..ありがとう.. –

3

は確かにこれはのように簡略化することができます。

IF (PATINDEX('%"%', @string) !=0) 
    BEGIN 
     SET @condition=1 
    END 
    ELSE 
    BEGIN 
     SET @condition=0 
    END 

からPATINDEX('%"%', @string)ので、> 0 PATINDEX('"%', @string)またはPATINDEXのいずれかになります( '"%'、@string)> 0

+0

助けてくれてありがとう.. –

関連する問題