我正在尝试应用红色/琥珀色/绿色逻辑,用于报告目的。
COLUMN_NAME将有一个由三个字母'R', ' a '和' g '的组合组成的字符串。
我正试图应用逻辑:如果COLUMN_NAME包含'R',则MAJOR_ISSUE如果列中包含'A'而不是'R',则MINOR_ISSUE其他好的
你能告诉我如何修改下面的SQL Update语句来实现这一点吗?
UPDATE DBO.TABLE_NAME
SET [COLUMN_RESULT] =
(
CASE WHEN COLUMN_NAME LIKE '%R%'THEN 'MAJOR_ISSUE'
WHEN COLUMN_NAME LIKE '%A%' ***AND NOT LIKE %R%*** THEN 'MINOR ISSUE'
ELSE 'OK'
END
)
如有任何帮助,不胜感激
AND
是逻辑运算符,两边需要两个完整的布尔表达式
boolean AND boolean
LIKE
是一个布尔运算符,两边都需要一个字符串。
string LIKE string
所以…
WHEN COLUMN_NAME LIKE '%A%' AND COLUMN_NAME NOT LIKE '%R%' THEN 'MINOR ISSUE'
或者,用括号使其更明显…
WHEN (COLUMN_NAME LIKE '%A%') AND (COLUMN_NAME NOT LIKE '%R%') THEN 'MINOR ISSUE'
case
表达式按顺序检查条件,因此您不需要检查已经处理过的条件:
update DBO.Table_Name
set Column_Result = case
when Column_Name like '%R%' then 'MAJOR_ISSUE'
-- At this point Column_Name cannot contain an 'R'.
when Column_Name like '%A%' then 'MINOR_ISSUE'
else 'OK' end;
请注意,case
计算表达式时会出现各种问题,而不会短路,例如,当您已经检查了零值时,可能会出现除零,因为表达式的计算顺序混乱。