使用CASE
语句时,我意识到根据documentation,我可以使用简单的CASE
表达式,input_expression
和{{1}对}}和when_expression
值(在这些示例中假设result_expression
中的值始终为正整数):
myField
或者我可以使用带有CASE [input_expression]
WHEN [when_expression] THEN [result_expression]
...
ELSE [result_expression]
END
CASE myField
WHEN 1 THEN 'One'
WHEN 2 THEN 'Two'
WHEN 3 THEN 'Three'
ELSE 'More than three'
END
和CASE
值对的搜索Boolean_expression
表达式:
result_expression
我也知道在编写搜索的CASE
WHEN [Boolean_expression] THEN [result_expression]
...
ELSE [result_expression]
END
CASE
WHEN myField = 1 THEN 'One'
WHEN myField = 2 THEN 'Two'
WHEN myField = 3 THEN 'Three'
ELSE 'More than three'
END
表达式时,我可以将IN
运算符用作任何Boolean_expression
的一部分:
CASE
在编写简单的CASE
WHEN myField IN (1,2) THEN 'One or two'
WHEN myField = 3 THEN 'Three'
ELSE 'More than three'
END
表达式时能够使用IN
运算符非常有用,例如:
CASE
但是这不会运行并给出错误:
关键字' IN'附近的语法不正确。
显然我上面的例子是人为的,但有没有办法写一个简单的CASE myField
WHEN IN (1,2,3) THEN 'Between one and three'
WHEN IN (4,5,6) THEN 'Between four and six'
WHEN IN (7,8,9) THEN 'Between seven and nine'
ELSE 'More than nine'
END
表达式并使用CASE
运算符?
通过阅读MSDN上的语法,我理解这似乎是不可能的,因为简单的IN
表达式是如何形成的 - 将CASE
与每个input_expression
进行比较以获得相等性 - 但我只是想知道是否有任何方式可以实现我所要求的,因为在每个when_expression
条款中一次又一次地保存相同的字段名称是很方便的。搜索WHEN
表达式。
答案 0 :(得分:2)
不,这是不可能的。文档区分 when_expression 和 Boolean_expression 。 when_expression 始终使用相等运算符。
Aaron Bertrand在他的Dirty Secrets of the CASE expression中描述了这样的表达式
SELECT CASE @variable
WHEN 1 THEN 'foo'
WHEN 2 THEN 'bar'
END
评估为
SELECT
WHEN @variable = 1 THEN 'foo'
WHEN @variable = 2 THEN 'bar'
END
因此无法使用 when_expression 替换比较运算符。只有您已经提到的 Boolean_expression 才能实现这一点:
SELECT
WHEN @variable IN (1,2) THEN 'foo'
WHEN @variable in (3,4) THEN 'bar'
END