Sql SELECT中的嵌套大小写表达式

Sql SELECT中的嵌套大小写表达式,sql,tsql,Sql,Tsql,我在使用条件语句提取SELECT语句中的条件数据时遇到一些困难 如果值不为null,则进行外部条件检查;如果值包含特定的字符集,则进行内部条件检查 select语句: refID = CASE externalID WHEN IS NOT NULL THEN CASE internalType WHEN CONTAINS(internalType,'B1') THEN 'C1' + externalID WHEN CONTA

我在使用条件语句提取SELECT语句中的条件数据时遇到一些困难

如果值不为null,则进行外部条件检查;如果值包含特定的字符集,则进行内部条件检查

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   

不幸的是,运行此代码会以错误消息“IS附近的语法不正确”结束。

请将字段移到案例中

   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  

将字段移动到案例中

   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  



在这种情况下,您可以使用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函数检查所需的字符串或模式,并处理数据。在这种情况下,您可以使用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函数检查所需的字符串或模式,并处理数据

大小写表达式,而不是语句。如果externalID不为NULL,则为Case…谢谢,但这只是将错误向前推到了“不正确的语法接近包含”执行类似的切换。您的意思是像吗?大小写表达式,not statement.case当externalID不为NULL时…谢谢,但这只是将错误向前推到“includes附近的语法不正确”执行类似的切换。你是说LIKE吗?@W.H我应该把那个放在那里,methinksThanks,它已经修复了它。不幸的是,无法使用CONTAINS,因为该表未编制索引。@W.H我应该把那个表放在那里,Methinkstanks,它已经修复了它。很遗憾,无法使用CONTAINS,因为该表未编制索引。您需要使用INSTR函数进行精确的模式检查。谢谢,太好了!很好。我很乐意帮助您。您需要使用INSTR功能进行精确的图案检查。谢谢,太好了!很好。我很乐意帮助你