oracle中case when的用法是什么

什么是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语句是非常常用的条件判断语句,可以帮助我们完成各种复杂的数据处理任务。

数据库标签