小编典典

在SQL Case语句中使用比较符号

sql

我正在寻找一种使用小于和大于符号在sql select查询中构建案例语句的方法。例如,我要基于变量选择排名:

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案例声明:

Select Case i
    Case Is < 100
        p = 1
    Case Is >= 100
        p = 2
End Select

也许在SQL中是不可能的,那没关系,我只想确认一下。


阅读 205

收藏
2021-04-22

共1个答案

小编典典

您可以将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结果为负int,其中SIGN返回-1。

如果@a大于等于3,则SIGN分别返回0或1。


如果您想要的输出是0、1和2,则可以进一步简化:

DECLARE @a INT
SET @a = 0

SELECT SIGN(@a - 3) + 1
2021-04-22