什么是case when语句
在Oracle数据库中,case when语句是一种用于进行条件判断的语句。它通常用于在SELECT、UPDATE及DELETE语句中,根据不同的条件对数据进行处理。
case when语句的语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN condition3 THEN result3
...
ELSE result
END
其中,condition1、condition2、condition3等是条件语句,result1、result2、result3等表示当条件成立时,所要执行的代码段或结果,ELSE result表示当所有条件都不成立时的处理。
case when的应用场景
1.数据转换
在实际的业务应用中,经常会遇到需要将某些特定的数据进行转换的情况。比如,某个表中有一个字段gender,它的值为1或2,需要将它转换为男或女:
SELECT
CASE gender
WHEN 1 THEN '男'
WHEN 2 THEN '女'
ELSE '未知'
END AS gender_desc
FROM
employee;
这段代码中,我们使用case when判断gender字段的值,当它为1时返回“男”,当它为2时返回“女”,否则返回“未知”,并将结果赋值给一个别名为gender_desc的字段。这样,我们就完成了数据的转换。
2.计算字段
有时,我们需要根据某些条件计算一个新的字段。比如,某个表中有两个字段price和quantity,需要计算出它们的乘积product:
SELECT
price,
quantity,
CASE
WHEN price IS NULL OR quantity IS NULL THEN NULL
ELSE price * quantity
END AS product
FROM
orders;
在这个例子中,我们首先判断price或quantity为空值的情况,并返回NULL值。然后,我们使用case when计算product的值,并将它作为一个新的字段返回。
3.日期计算
在处理日期数据时,case when语句也是非常有用的。比如,某个表中有一个字段birthdate,需要根据当前日期计算出每个人的年龄:
SELECT
name,
birthdate,
CASE
WHEN birthdate IS NULL THEN NULL
ELSE TRUNC(MONTHS_BETWEEN(SYSDATE, birthdate) / 12)
END AS age
FROM
employees;
在这个例子中,我们使用case when判断birthdate是否为空值,如果是则返回NULL值,否则使用MONTHS_BETWEEN函数计算出与当前日期之间的月份数目,再除以12取整后得到年龄,并将它作为一个新的字段返回。
4.数据过滤
除了计算和转换数据之外,case when语句还可以用于数据过滤。比如,某个表中有一个字段score,需要筛选出其中大于等于80分的记录:
SELECT *
FROM
students
WHERE
CASE
WHEN score >= 80 THEN 1
ELSE 0
END = 1;
在这个例子中,我们使用case when判断score是否大于等于80分,如果是则返回1,否则返回0。然后,在WHERE子句中使用case when过滤出返回值为1的记录,即返回score大于等于80分的记录。
总结
本文介绍了在Oracle数据库中的case when语句的应用场景,包括数据转换、计算字段、日期计算和数据过滤。在实际的开发中,case when语句是非常常用的条件判断语句,可以帮助我们完成各种复杂的数据处理任务。