sql - 如何在不同条件的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。
我真的很感谢你们的帮助。谢谢
解决方案
原因是因为 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;
推荐阅读
- javascript - TypeScript 3:JSX 元素类型“组件”没有任何构造或调用签名。[2604]
- mariadb - 减少每个请求的 MariaDB 查询时间
- javascript - 将多个 iframe 打印为一页
- php - 来自 JIRA api 的数组中 DateTime 的 PHP 问题
- java - 新创建的谷歌地图活动的运行时错误
- java - Netbeans-应用程序启动方法中的异常 java.lang.reflect.InvocationTargetException
- ruby-on-rails - 如何使用 ActiveRecord 编写这个 MySQL 查询
- java - swagger-ui.html 页面无法正常工作
- sql - Oracle SQL Pivot 查询未正确分组
- c# - Collider.isTouching 用于 3D 对撞机