SQL 检查信

SQL Check Letter

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

COLUMN_NAME 将有一个由三个字符组成的字符串,其中包含字母 'R'、'A' 和 'G.

的组合

我正在尝试应用以下逻辑: 如果 COLUMN_NAME 包含 'R' 那么 MAJOR_ISSUE 如果列包含 'A' 而不是 'R' 那么 MINOR_ISSUE 其他好

能否请您告诉我如何修改下面的 SQL 更新语句来实现此目的?

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 计算 没有短路的表达式中存在各种问题,例如当您已经检查了零值时,可能会被零除,因为表达式的计算顺序是乱序的。