2016-09-28 117 views
0

我在使用条件的SELECT语句中拉条件数据时遇到了一些困难。SELECT中的嵌套Case表达式

有外部条件检查值是否为空,内部条件检查值是否包含特定的一组字符。

select语句:

 refID = CASE externalID 
     WHEN IS NOT NULL THEN CASE internalType 
      WHEN CONTAINS(internalType,'B1') THEN 'C1' + externalID 
      WHEN CONTAINS(internalType,'B2') THEN 'C2' + externalID 
      ELSE 'Ext' 
      END 
     ELSE 'N/A' 
     END 

不幸的是,这段代码运行并显示错误消息 “不正确的语法附近,

+0

案例表达,不言。 – jarlh

+0

externalID不为NULL的情况,那么... – jarlh

+0

谢谢,但是这只是将错误推送到“CONTAINS附近的错误语法” –

回答

4

移动领域进入的情况下

refID = CASE 
       WHEN externalID IS NOT NULL THEN 
        CASE 
          WHEN internalType like '%B1%' THEN 'C1' + externalID 
          WHEN internalType like '%B2%' THEN 'C2' + externalID 
          ELSE 'Ext' 
        END 
       ELSE 'N/A' 
      END 
+0

@ W.H我应该离开那个,methinks – JohnHC

+0

谢谢,这已经修复了它。不幸的是CONTAINS无法使用,因为表格没有编入索引。 –

1

结束

在这种情况下,您可以使用INSTR功能,

refID = CASE externalID 
    WHEN IS NOT NULL THEN CASE internalType 
     WHEN INSTR(internalType,'B1') THEN 'C1' + externalID 
     WHEN INSTR(internalType,'B2') THEN 'C2' + externalID 
     ELSE 'Ext' 
     END 
    ELSE 'N/A' 
    END 

INSTR - instring函数检查所需的字符串或模式,并且处理该数据

+0

您需要使用INSTR功能进行准确的模式检查 –

+0

谢谢,太好了!工作正常。 –

+0

我很乐意帮助你 –