CASE表达式
CASE WHEN 表达式是一个通用条件的表达式,可以在表达式有效的任何位置使用
用法如下:
SELECT 字段
CASE
WHEN condition THEN result
[ WHEN condition THEN result ]
...
[ ELSE result ]
END
如果满足condition(condition是一个boolean表达式),则返回相应的result
案例一
SQL> CREATE TABLE PAGE(
id varchar(4),
age number,
sex varchar(4)
);
表已创建。
SQL> INSERT INTO PAGE VALUES('1',16,'W');
已创建 1 行。
SQL> INSERT INTO PAGE VALUES('2',19,'W');
已创建 1 行。
SQL> INSERT INTO PAGE VALUES('3',24,'M');
已创建 1 行。
SQL> INSERT INTO PAGE VALUES('4',89,'W');
已创建 1 行。
SQL> SELECT * FROM PAGE;
ID AGE SEX
-------- ---------- --------
1 16 W
2 19 W
3 24 M
4 89 W
SQL> SELECT id,sex,
CASE
WHEN age<18 THEN (age||'未成年')
WHEN age>60 THEN (age||'老年')
ELSE (age || '中年')
END AS sex
FROM PAGE;
ID AGE SEX
---------------------------------------------------------------
1 W 16未成年
2 W 19中年
3 M 24中年
4 W 89老年
SQL> SELECT id,age,
CASE
WHEN sex='W' THEN '女'
WHEN sex='M' THEN '男'
ELSE '未知'
END AS sex
FROM PAGE;
ID AGE SEX
-----------------------------------------------------
1 16 女
2 19 女
3 24 男
4 89 女
案例二
--学生表
SQL> CREATE TABLE student(
id VARCHAR(32),
s_name VARCHAR2(32),
c_name VARCHAR2(32) NOT NULL,
semester NUMBER DEFAULT 1 CHECK(semester IN (1, 2)),
grade NUMBER DEFAULT 0,
);
INSERT INTO student VALUES ('0001','ToM1','高等代数','1',59);
INSERT INTO student VALUES ('0002','ToM2','数学分析','2',85);
INSERT INTO student VALUES ('0003','ToM3','人文历史','2',0);
INSERT INTO student VALUES ('0004','ToM4','大学英语','1',79);
INSERT INTO student VALUES ('0005','ToM5','数学分析','2',65);
INSERT INTO student VALUES ('0006','ToM6','人文历史','1',66);
INSERT INTO student VALUES ('0007','ToM7','大学英语','1',19);
INSERT INTO student VALUES ('0008','ToM8','数学分析','1',100);
SQL> SELECT * FROM STUDENT;
ID S_NAME C_NAME SEMESTER GRADE
-----------------------------------------------------------------
0001 ToM1 高等代数 1 59
0002 ToM2 数学分析 2 85
0003 ToM3 人文历史 2 0
0004 ToM4 大学英语 1 79
0005 ToM5 数学分析 2 65
0006 ToM6 人文历史 1 66
0007 ToM7 大学英语 1 18
0008 ToM8 数学分析 1 100
SQL> SELECT id,s_name,c_name,semester,
CASE
WHEN grade<60 THEN '不及格'
WHEN (grade>60 AND grade <= 75) THEN '及格'
WHEN (grade>75 AND grade <= 90) THEN '良好'
WHEN grade>90 THEN '优秀'
ELSE '未知'
END AS grade
FROM student;
ID S_NAME C_NAME SEMESTER GRADE
-----------------------------------------------------------------
0001 ToM1 高等代数 1 不及格
0002 ToM2 数学分析 2 良好
0003 ToM3 人文历史 2 不及格
0004 ToM4 大学英语 1 良好
0005 ToM5 数学分析 2 及格
0006 ToM6 人文历史 1 及格
0007 ToM7 大学英语 1 不及格
0008 ToM8 数学分析 1 优秀
边学习边记录,若有不足之处欢迎留言指点…