我正在寻找一种使用小于和大于符号在 sql select 查询中构建 case 语句的方法。例如,我想根据一个变量选择排名:
DECLARE @a INT
SET @a = 0
SELECT CASE
WHEN @a < 3 THEN 0
WHEN @a = 3 THEN 1
WHEN @a > 3 THEN 2
END
我想把它写成:
DECLARE @a INT
SET @a = 0
SELECT CASE @a
WHEN < 3 THEN 0
WHEN 3 THEN 1
WHEN > 3 THEN 2
END
...但是 SQL 不允许我以这种方式使用 < 和 > 符号。有没有一种方法可以让我在 SQL 2005 中做到这一点,或者我是否需要使用第一个中的代码。
只想要代码一次的原因是因为它会使代码更具可读性/可维护性,而且还因为我不确定 SQL Server 是否必须为每个 CASE 语句运行计算。
我正在寻找等效的 VB.NET case 语句:
Select Case i
Case Is < 100
p = 1
Case Is >= 100
p = 2
End Select
也许这在 SQL 中是不可能的,没关系,我只是想确认一下。
最佳答案
您可以使用SIGN功能为
DECLARE @a INT
SET @a = 0
SELECT CASE SIGN(@a - 3)
WHEN -1 THEN 0
WHEN 0 THEN 1
WHEN 1 THEN 2
END
如果@a
小于 3,则 @a - 3
结果为负整数,其中 SIGN 返回 -1。
如果@a
为 3 或更大,则 SIGN 分别返回 0 或 1。
如果您想要的输出是 0、1 和 2,那么您可以进一步简化:
DECLARE @a INT
SET @a = 0
SELECT SIGN(@a - 3) + 1
关于sql - 在 sql case 语句中使用比较符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9460328/