情况下的结果表达式

apm*_*apm -1 sql-server case

我想case在 SQL Server中的表达式中给出结果的表达式。当我检查

链接:案例表达。但我还是很困惑。

例如。

Simple CASE expression: 
CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END
Run Code Online (Sandbox Code Playgroud)

我想将 result_expression 作为以下示例查询。

select * from mytable where
CASE WHEN col1='12' THEN col2 like '%12%' ELSE col3 like '%12%' END
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

关键字“like”附近的语法不正确。

这有什么可能吗?

ype*_*eᵀᴹ 5

SQL Server 没有BOOLEAN类型 - 至少没有公开,在内部它具有在条件中使用的布尔值 - 并且CASE表达式不能具有这种类型的结果。请参阅上面的链接,其中解释了:

与其他 SQL Server 数据类型不同,布尔数据类型不能指定为表列或变量的数据类型,也不能在结果集中返回。

您可以WHERE使用ANDand重写条件OR

SELECT * 
FROM mytable 
WHERE ( (col1 = '12')                  AND (col2 LIKE '%12%') ) 
   OR ( (col1 <> '12' OR col1 IS NULL) AND (col3 LIKE '%12%') ) ;
Run Code Online (Sandbox Code Playgroud)