SQL Check Letter



我正在尝试应用红色/琥珀色/绿色逻辑,用于报告目的。

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计算表达式时会出现各种问题,而不会短路,例如,当您已经检查了零值时,可能会出现除零,因为表达式的计算顺序混乱。

最新更新