Как вставить кратное число в операторе case на сервере sql с другими условиями? - PullRequest
0 голосов
/ 02 марта 2020

Я действительно борюсь с тем, как вставить else в моем выражении case с другими условиями ... Я не уверен, что это неправильный синтаксис или что? Он не работает, у меня нет ошибок сообщения, проблема в том, что у меня все еще есть 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 и поставить da sh между словами когда строка слишком длинная после ядра. ; но в некоторых случаях строка не такая длинная, поэтому мне не нужны da sh like (core.user, core.idea, core.award) и т. д., просто избавьтесь от idealink.

Я очень ценю любую помощь, ребята. Спасибо

1 Ответ

0 голосов
/ 02 марта 2020

Причина в том, что 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;
...