2017-10-17 25 views
1

私はCASE文を初めて試行していますが、なぜ最後のWHENとELSEで構文エラーが発生するのか理解できません。値が特定の文字セットで始まる場合は、substringを抽出しようとしています。私のコードは以下の通りです:SQL構文エラー

SELECT 
CASE 
     WHEN LEFT ([RCode],2) = 'BB' THEN SUBSTRING([RCode],3,LEN([RCode])) 
     WHEN LEFT ([RCode],4) = 'APT-' THEN SUBSTRING([RCode],5,LEN([RCode]) 
     WHEN LEFT ([RCode],4) = 'PS-' THEN SUBSTRING([RCode],4,LEN([RCode]) 
     ELSE [RCode] 
END 

    FROM [Xperdyte].[dbo].[tJCLines] 

ガイダンスをいただければ幸いです。

+1

構文エラーとは何ですか?どのデータベースを使用していますか? –

+0

なぜ左の4文字を選択し、それを3文字のリテラル文字列と比較していますか? – HoneyBadger

+7

2番目と3番目のWHEN // THEN行にカッコがありません –

答えて

0

これは、(必ずしも)あなたの構文の問題を修正しませんが、私はあなたが比較にlikeを使用することをお勧めします:

SELECT (CASE WHEN RCode LIKE 'BB%' THEN SUBSTRING([RCode], 3, LEN([RCode])) 
       WHEN RCode LIKE 'APT-%' THEN SUBSTRING([RCode], 5, LEN([RCode])) 
       WHEN RCode LIKE 'PS-%' THEN SUBSTRING([RCode], 4, LEN([RCode])) 
       ELSE [RCode] 
      END) 
    FROM [Xperdyte].[dbo].[tJCLines]; 

その後は、文字をカウントする必要はありません - と第三条件一致します。

0

2つの右括弧が欠けています。

SELECT CASE WHEN LEFT([RCode],2) = 'BB' 
      THEN SUBSTRING([RCode],3,LEN([RCode])) 
      WHEN LEFT([RCode],4) = 'APT-' 
      THEN SUBSTRING([RCode],5,LEN([RCode])) 
      WHEN LEFT([RCode],4) = 'PS-' 
      THEN SUBSTRING([RCode],4,LEN([RCode])) 
      ELSE [RCode] 
     END 
FROM [Xperdyte].[dbo].[tJCLines] 
+0

Thanks Matt。私はそれが何か簡単だと分かっていました。 –