【发布时间】:2021-06-08 19:49:31
【问题描述】:
我知道在 SQL Server 的 case when 语句中,当满足第一个 true 条件时,将评估表达式并跳过所有后续的 when 语句。我的问题很简单,即使在第一条语句为真之后,是否有某种方法可以继续评估和修改结果表达式?
例如,假设我在名为 my_column 的列中有一条数据库记录,其字符串值为“ABCDEFG”。我希望能够做这样的事情:
select
case when my_column like '%A%' then REPLACE(my_column, 'A', 'M')
when my_column like '%M%' then REPLACE(my_column, 'M', 'N')
end as new_column
from my_table
然后我希望我的结果值为'NBCDEFG'
所以本质上我是在尝试将更改从一个 when 语句级联到下一个。
【问题讨论】:
-
case是一个 expresson 而不是一个 statement 来回答你的问题 - 它不是关于运行代码而是关于返回一个值,一个单一的值.为什么在你描述的情况下你甚至需要一个案例?为什么不直接调用 replace 无条件? -
撇开学究不谈,这只是一个玩具示例。在真正的问题中,我试图用一个案例(或类似的东西)替换多个后续的更新语句,这在本质上是如何操作字符串的算法。有第一步、第二步、第三步等,以便根据规范操作字符串。
-
让您的示例具有代表性。将您的示例归结为要点很好,但是如果它不能代表实际问题,则它没有用(并且会引起无用的答案)。没有像
CONTINUE这样简单的灵丹妙药,根据实际问题,最好的策略很可能是完全重写语句(SQL 就是这样有趣)。 -
CROSS APPLY(VALUES在这种情况下可能非常有用。 @DaleK 的评论不仅仅是迂腐,这就是你甚至有这样一个问题的原因 -
@DaleK,又名 w3fools...
标签: sql sql-server tsql case