gpt4 book ai didi

sql-server - CASE 语句 SQL : Priority in cases?

转载 作者:行者123 更新时间:2023-12-03 17:05:34 25 4
gpt4 key购买 nike

我有一个关于何时在 SQL (Server 2008) 中使用 CASE 语句的一般性问题,并且不止一个 WHEN 条件为真,但结果标志不同。

这是假设示例,但在跨多列应用检查以对行中的数据进行分类时可能是可转移的。下面代码的输出取决于案例的排序方式,因为两者都是正确的。

DECLARE @TESTSTRING varchar(5)
SET @TESTSTRING = 'hello'

SELECT CASE
WHEN @TESTSTRING = 'hello' THEN '0'
WHEN @TESTSTRING <> 'hi' THEN '1'
ELSE 'N/A'
END AS [Output]

一般来说,以这种方式创建标志会被认为是不好的做法吗? WHERE, OR 语句会更好吗?

最佳答案

Case 语句保证按照它们的编写顺序进行评估。使用第一个匹配值。因此,对于您的示例,值 0会被退回。

这在 documentation 中有清楚的描述。 :

Searched CASE expression:

  • Evaluates, in the order specified, Boolean_expression for each WHEN clause.
  • Returns result_expression of the first Boolean_expression that evaluates to TRUE.
  • If no Boolean_expression evaluates to TRUE, the Database Engine returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.


至于这是好还是坏的做法,我会倾向于中立。这是 ANSI 行为,因此您可以依赖它,并且在某些情况下它非常有用:
select (case when val < 10 then 'Less than 10'
when val < 100 then 'Between 10 and 100'
when val < 1000 then 'Between 100 and 1000'
else 'More than 1000' -- or NULL
end) as MyGroup

关于sql-server - CASE 语句 SQL : Priority in cases?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22733738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com