2017-10-17 146 views
1

我试图给我们第一次CASE语句,我不明白为什么我在最后一个WHEN和ELSE语句错误。如果值是从一组特定字符开始的,我试图提取substring。我的代码如下:CASE WHEN 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

您在第二个和第三个时候丢失右括号// 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

错过了两个右括号。

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

谢谢马特。我知道这很简单。 –