CASE中的多个WHEN仅适用于前两个

我有4个WHEN的案例。前两个适用,但后两个(或我添加的其他任何一个)不适用。所有WHEN都指同一字段。

这就是我想要做的。有问题的字段的格式为:

[Indexname]_[Company]_[Product]_[StartDate$EndDate] 

所以看起来像

Retail_Walmart_Stores_Inc_Chair_03012012$05312015

我写的第一个案例是消除日期

CASE WHEN FIELD1 LIKE '%$%' THEN REPLACE(FIELD1,RIGHT(FIELD1,17),'') ELSE FIELD1 END AS NewField

那很好。然后,我想删除索引名称,因此添加了第二个WHEN。那也起作用。但是之后,我们的公司将拥有我们所经营公司的完整法定名称(因此“ Wal-Mart Stores,Inc”或“ The Walt Disney Company”。出于可读性,我希望这些记录只说“ WalMart”或迪士尼。”

我的新代码为

CASE                                                                                             
   WHEN FIELD1 LIKE '%$%'                                                                        
     THEN REPLACE(FIELD1,'')                                                      
   WHEN FIELD LIKE '%RetaIL%'                                                                 
     THEN REPLACE(FIELD1,'RetaIL','')                                                            
   WHEN FIELD LIKE '%STORES_INC%'                                                                 
     THEN REPLACE(FIELD1,'STORES_INC','')                                                        
   WHEN FIELD LIKE '%THE_WALT_DIsnEY_COMPANY%'                                                                 
     THEN REPLACE(FIELD1,'THE_WALT_DIsnEY_COMPANY','DIsnEY')                                                        
   ELSE FIELD1                                                                                    
   END AS NewField1

我不明白为什么这在前两个之后会停止工作。起初我以为可能是因为它们都指的是第一列,但是第二个WHEN也不会起作用。

任何人都知道发生了什么事吗?

yc135 回答:CASE中的多个WHEN仅适用于前两个

如果您要进行所有替换操作,而不仅仅是第一个替换操作:

REPLACE(REPLACE(REPLACE(CASE WHEN FIELD1 LIKE '%$%' THEN REPLACE(FIELD1,RIGHT(FIELD1,17),'') ELSE FIELD1
                        END,'RETAIL',''
                       ),STORES_INC',''
               ),'THE_WALT_DISNEY_COMPANY','DISNEY'
       )  AS NewField1

case表达式在计算结果为true的第一个表达式处停止。

本文链接:https://www.f2er.com/3163502.html

大家都在问