sql - 在 sql case 语句中使用比较符号

标签 sql sql-server sql-server-2005 tsql

我正在寻找一种使用小于和大于符号在 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/

相关文章:

c# - 如何在 .NET 4.0 的 Entity Framework 中进行 "like"通配符比较?

java - 如何将 Struts2 datetimepicker 值转换为 SQL 日期时间,以便将其保存到 SQL 表中

sql-server - 需要确保字符串之间有一个连字符

SQL 返回子项计数不等于列值的行

sql - 表索引设计

mysql - 如何在2个类别的sql中显示最大值

java - 了解 SQL 中的表约束

sql-server - SSIS包编辑

SQL Server : A connection was successfully established with the server, 但随后在登录过程中发生错误

sql - 消息 102,级别 15,状态 1,第 3 行 ',' 附近的语法不正确