与 IF 语句一样,SQLite CASE 语句检查条件并返回一个值。它从检查第一个条件开始,并继续检查条件,直到发现条件为真(如 IF-THEN-ELSE 语句)。一旦发现条件为真,它将停止检查进一步的条件并返回值。如果没有发现任何条件为 true,则返回 ELSE 子句中的值。如果未定义 ELSE 子句,则返回 NULL。
语法
在 SQLite 中使用 CASE 语句的语法如下:
CASE
WHEN Condition1 THEN Value1
WHEN Condition2 THEN Value2
WHEN Condition3 THEN Value3
...
ELSE Value
END
返回值
CASE 语句返回任何数据类型,例如字符串、数字、日期等。如果没有发现条件为 true,则 CASE 语句将返回 ELSE 子句中的值。如果省略 ELSE 子句并且没有发现任何条件为 true,则 CASE 语句将返回 NULL。
示例:
考虑一个名为 Employee 的数据库表 包含以下记录:
EmpID | Name | City | Age | Salary |
---|---|---|---|---|
1 | John | London | 25 | 3000 |
2 | Marry | New York | 24 | 2750 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
5 | Ramesh | New Delhi | 28 | 3000 |
6 | Huang | Beijing | 28 | 2800 |
获取姓名和薪资数据按工资对员工进行分类(使用CASE语句来定义类别),可以使用以下语句:
SELECT Name, City, Salary,
CASE
WHEN Salary < 2800 THEN '工资大于2800.'
WHEN Salary > 2800 THEN '工资不到2800.'
WHEN Salary = 2800 THEN '工资是2800.'
ELSE '工资数据错误.'
END AS SalaryinCategory
FROM Employee;
这将产生如下所示的结果:
Name | City | Salary | SalaryCategory |
---|---|---|---|
John | London | 3000 | 工资大于2800。 |
Marry | New York | 2750 | 工资不到2800。 |
Jo | Paris | 2800 | 工资是2800。 |
Kim | Amsterdam | 3100 | 工资大于2800。 |
Ramesh | New Delhi | 3000 | 工资大于2800。 |
Huang | Beijing | 2800 | 工资是2800。 |
考虑下面的示例,其中 CASE 语句用于根据给定条件按结果排序。
SELECT * FROM Employee
ORDER BY
(CASE
WHEN Age <= 27 THEN Age
ELSE City
END);
以下代码的结果将是:
EmpID | Name | City | Age | 工资 |
---|---|---|---|---|
2 | Marry | New York | 24 | 2750 |
1 | John | London | 25 | 3000 |
3 | Jo | Paris | 27 | 2800 |
4 | Kim | Amsterdam | 30 | 3100 |
6 | Huang | Beijing | 28 | 2800 |
5 | Ramesh | New Delhi | 28 | 3000 |