在 Oracle 中,CASE 语句主要用于实现条件判断和分支逻辑。它有两种形式:简单 CASE 表达式和搜索 CASE 表达式。
- 简单 CASE 表达式:
简单 CASE 表达式用于对一个表达式进行比较,并根据不同的结果执行不同的操作。
语法如下:
CASE 表达式
WHEN 值1 THEN 表达式1
WHEN 值2 THEN 表达式2
...
ELSE 表达式N
END
示例:
示例中,根据 employees 表中的 department_id 列的值不同,返回不同的部门名称。
SELECT
CASE department_id
WHEN 10 THEN 'Accounting'
WHEN 20 THEN 'Research'
WHEN 30 THEN 'Sales'
ELSE 'Other'
END AS department_name
FROM employees;
- 搜索 CASE 表达式:
搜索 CASE 表达式用于在一系列条件中找到匹配的条件执行相应的操作。
语法如下:
CASE
WHEN 条件1 THEN 表达式1
WHEN 条件2 THEN 表达式2
...
ELSE 表达式N
END
示例1:
示例中,根据 employees 表中的 salary 列的值不同,返回不同的薪资水平。
SELECT
CASE
WHEN salary < 5000 THEN 'Low'
WHEN salary >= 5000 AND salary < 10000 THEN 'Medium'
WHEN salary >= 10000 THEN 'High'
END AS salary_level
FROM employees;
示例2:
判断系统时间与程序时间是否为当天,如果是返回‘yes’,如果不是返回‘no’,其他情况返回‘error’。
select case
when (select TO_CHAR(substr(DATE,0,14)) from SYSCONFIG) = (SELECT RPAD((SELECT TO_CHAR(SYSDATE,'YYYYMMDD') from dual ),14,'0') FROM dual) then 'yes'
when (select TO_CHAR(substr(DATE,0,14)) from SYSCONFIG) != (SELECT RPAD((SELECT TO_CHAR(SYSDATE,'YYYYMMDD') from dual ),14,'0') FROM dual) then 'no'
ELSE 'error' end demo from dual t;