与 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 的数据库表 包含以下记录:

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100
5RameshNew Delhi283000
6HuangBeijing282800

获取姓名和薪资数据按工资对员工进行分类(使用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; 

这将产生如下所示的结果:

NameCitySalarySalaryCategory
JohnLondon3000工资大于2800。
MarryNew York2750工资不到2800。
JoParis2800工资是2800。
KimAmsterdam3100工资大于2800。
RameshNew Delhi3000工资大于2800。
HuangBeijing2800工资是2800。

考虑下面的示例,其中 CASE 语句用于根据给定条件按结果排序。

SELECT * FROM Employee 
ORDER BY
(CASE
  WHEN Age <= 27 THEN Age
  ELSE City
END); 

以下代码的结果将是:

EmpIDNameCityAge工资
2MarryNew York242750
1JohnLondon253000
3JoParis272800
4KimAmsterdam303100
6HuangBeijing282800
5RameshNew Delhi283000