【发布时间】:2020-03-02 14:37:07
【问题描述】:
我真的很苦恼如何在不同条件下的 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即可。
非常感谢你们的帮助。 谢谢
【问题讨论】:
-
一个
CASE不能有多个ELSE子句。ELSE用于当没有WHEN解析为 true 时。 -
Humpf,你知道我该如何解决这个问题吗?(我是新手).. :(
-
那些不是多个
ELSE子句,@Larnu。它们是嵌套的。主要CASE的ELSE是嵌入的CASE。问题中的(可以说是糟糕的)格式只是使它看起来在语法上无效。 -
是的,更多的是 OP 似乎暗示他们想要多个 else 用于单个
CASE, @EricBrandt 。
标签: sql sql-server sql-update case