sql-server - 如何在 SQL Server 中使用多个 CASE 语句更新多行?
问题描述
如何使用多个 CASE 更新表中的行?我一直在尝试以不同的方式编写脚本,但我确信语法是错误的。知道错误在哪里吗?
UPDATE NameToSplit
SET Aliases = CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 4 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 5, 0, '-')END;
CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 5 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 6, 0, '-')END;
CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 6 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 7, 0, '-')END;
CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 7 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 8, 0, '-')END;
CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 8 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 9, 0, '-')END;
CASE LEN(Alias)
WHEN CHARINDEX('.', Alias) + 9 THEN Alias
ELSE STUFF(Alias, CHARINDEX('.', Alias) + 10, 0, '-')END;
结果必须是这样的:
Names Alias Aliases
-------------------------------------------------------------------------
idealink.core.usergroup core.usergroup core.user-group
idealink.core.userloginhistory core.userloginhistory core.user-loginhistory
idealink.core.challengecategories core.challengecategories core.challenge-categories
idealink.core.activitydetails core.activitydetails core.activity-details
(core.) 之后的单词长度不同,这就是为什么我需要创建不同的案例来获得所有这些。
解决方案
Per the docs, you have your ELSE
in the wrong spot. The syntax would be like this:
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
It ends up acting more like a switch
statement where the subsequent when
statements will only make an assertion if the previous statements have asserted false.
推荐阅读
- powerbi - CALCULATE 中的过滤器处理顺序
- subdomain - 如何使用正则表达式提取字符串中的域?
- java - 获取用户输入并搜索二维数组并打印结果
- c++ - 在无向图中通过其顶点找到一条边 [C++ BGL]
- java - Java - 通过SpecificAvroSerde的输入动态更改Kafka数据类型
- vscode-settings - VSCode Intellisense:我们可以将关键字添加到不会自动完成的“排除”列表中吗?
- sql - 用于 FROM 子句之前的 SQL 代码编辑器的智能感知/自动完成
- database - 在 Power BI 中加载数据(txt 文件 | 文件大小大于 10GB)
- xslt - 如何检查元素被创建了多少次并创建了 n 次
- parsing - 将标记化的字符串传递给 Google Translate API