sql - sql server中基于BETWEEN运算符编写case语句

标签 sql sql-server

我有一个 CASE 语句,如下所示:

SELECT CASE 
WHEN <expression>> BETWEEN 0 AND 10 THEN '0-10'
WHEN <<expression>> BETWEEN 11 AND 20 THEN '11-20'
WHEN <<expression>> BETWEEN 21 AND 30 THEN '21-30'
...

这很好用,但看起来很丑。

我想将它转换成如下所示:

SELECT CASE <expression>>
WHEN  BETWEEN 0 AND 10 THEN '0-10'
WHEN  BETWEEN 11 AND 20 THEN '11-20'
WHEN  BETWEEN 21 AND 30 THEN '21-30'
...

显然第二个查询看起来更好,因为我不必多次编写复杂的表达式。但它正在出错。

Incorrect syntax near the keyword 'between'.

有人可以让我知道我在这里做错了什么吗?

更新:

正如所指出的,我已经更改了问题中的查询以使范围成为排他性的。

最佳答案

你想要的是不可能的,因为 between 语句的语法需要一个表达式来测试,因为它是第一个参数:

test_expression [ NOT ] BETWEEN begin_expression AND end_expression

所以你坚持使用第一种语法。

附带说明一下,您的范围有点偏离 between uses inclusive ranges,但 case 表达式是按顺序计算的,因此范围实际上是:

WHEN <<expression>> BETWEEN  0 AND 10 THEN '0-10'
WHEN <<expression>> BETWEEN 11 AND 20 THEN '11-20'
WHEN <<expression>> BETWEEN 21 AND 30 THEN '21-30'

关于sql - sql server中基于BETWEEN运算符编写case语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29204602/

相关文章:

MySQL 查询对表进行联接,其中第二个表名称来自第一个表中的列

sql - 高效的 SQL Server 存储过程

mysql - 在 SQL 中,如何通过查找与一列相等的所有行来更新表的每一行,然后将另一列设置为彼此相等

sql - 我可以在 SQL Server 中进行时区转换吗?

java - 板对板拼字游戏

python - PostgreSQL Python 将表从一个数据库复制到另一个数据库

python - 从 Django 中的数据库获取某些元素

php - 用于 MS SQL Server 的 PDO DBLIB 驱动程序 : Cannot find php_pdo_driver. h

c# - 更新 Entity Framework 中的计算列

mysql - MySQL数据库中的法语字符