首页 > 解决方案 > 如何在不同条件的sql server的case语句中插入多个else?

问题描述

我真的很挣扎如何在不同条件下的 case 语句中插入 else ...我不确定是语法错误还是什么?它不起作用,我没有任何错误消息,问题是在某些情况下我的别名中仍然有 Null ......

    UPDATE Table
    SET Alias = SUBSTRING(Names, 10, 40);

    UPDATE Table
            SET Alias = CASE WHEN  Alias LIKE 'core.user%'  OR Alias LIKE  'core.idea%' OR Alias LIKE'core.form%' 
                             THEN STUFF(Alias, CHARINDEX('.', Alias) + 5, 0, '-') 
                             WHEN  Alias LIKE 'core.badge%'  OR Alias LIKE  'core.award%' OR Alias LIKE 'core.field%' OR Alias LIKE 'core.audit%' OR Alias LIKE 'core.event%'
                             THEN STUFF(Alias, CHARINDEX('.', Alias) + 6, 0, '-')
                             ELSE CASE len(Alias) when charindex('.',Alias) +4 then Alias
                                  ELSE CASE len(Alias)when charindex('.',Alias)+ 5 then Alias
                                        END
                                   END
                         END;

     /*the result for this part is:*/
     Names                                 Alias
     idealink.core.userbadge               core.user-badge
     idealink.core.ideacategories          core.idea-categories
     idealink.core.awardtype               core.award-type        /*till here it's working,but when*/
     idealink.core.user                    NULL        ---I'd like to have (core.user)----
     idealink.core.idea                    NULL        ---I'd like to have (core.idea)----
     idealink.core.award                   NULL        ---I'd like to have (core.award)---- 

     /*I think the problem is here, I'm having Null*/

这一切的目的是摆脱idealink,当字符串在核心之后太长时,在单词之间放置一个破折号。;但在某些情况下字符串不是那么长,所以我不需要像 (core.user,core.idea,core.award) 之类的破折号等,只需摆脱idealink。

我真的很感谢你们的帮助。谢谢

标签: sqlsql-serversql-updatecase

解决方案


原因是因为 core.user 和 core.userbridge 都属于您为别名定义的标准,例如 'core.user%'

要显式设置 core.user、core.idea、core.award 的值,您可以执行以下操作。

检查 /****************/ 之间的部分

UPDATE Table
    SET Alias = SUBSTRING(Names, 10, 40);

UPDATE Table
   SET Alias = CASE /*****************************************************************************************/
                    WHEN Alias in('core.user','core.idea','core.award')
                    THEN Alias                  
                    /*****************************************************************************************/
                    WHEN Alias LIKE 'core.user%'  OR Alias LIKE  'core.idea%' OR Alias LIKE'core.form%' 
                    THEN STUFF(Alias, CHARINDEX('.', Alias) + 5, 0, '-') 
                    WHEN  Alias LIKE 'core.badge%'  OR Alias LIKE  'core.award%' OR Alias LIKE 'core.field%' OR Alias LIKE 'core.audit%' OR Alias LIKE 'core.event%'
                    THEN STUFF(Alias, CHARINDEX('.', Alias) + 6, 0, '-')
                    ELSE CASE len(Alias) when charindex('.',Alias) +4 then Alias
                         ELSE CASE len(Alias) when charindex('.',Alias)+ 5 then Alias
                               END
                         END
                END;

推荐阅读