数据库的CASE( )函数

上一篇 / 下一篇  2017-01-02 00:23:11 / 个人分类:数据库

COALESCE()函数只能用来进行空值的逻辑判断处理,如果要实现“如果年龄大于25则返回姓名,否则返回别名”这样的逻辑判断就比较麻烦了。在主流数据库系统中提供了CASE函数的支持,严格意义上来讲CASE函数已经是流程控制语句了,不是简单意义上的函数,不过为了方便,很多人都将CASE称作“流程控制函数”。

1、用法一

CASE函数的语法如下:
CASE expression
WHEN value1 THEN returnvalue1
WHEN value2 THEN returnvalue2
WHEN value3 THEN returnvalue3
……
ELSE defaultreturnvalue
END

CASE函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1,如果expression等于value2则返回returnvalue2,expression等于value3则返回returnvalue3,……以此类推,如果不符合所有的WHEN条件,则返回默认值defaultreturnvalue。

//判断谁是“好孩子”,我们比较偏爱Tom和Lily,所以我们将他们认为是好孩子,而我们比较不喜欢Sam和Kerry,所以认为他们是坏孩子,其他孩子则为普通孩子
SELECT
FName,
(CASE FName
WHEN 'Tom' THEN 'GoodBoy'
WHEN 'Lily' THEN 'GoodGirl'
WHEN 'Sam' THEN 'BadBoy'
WHEN 'Kerry' THEN 'BadGirl'
ELSE 'Normal'
END) as isgood
FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:
FNAME ISGOOD
Tom GoodBoy
Jim Normal
Lily GoodGirl
Kelly Normal
Sam BadBoy
Kerry BadGirl
Smith Normal
BillGates Normal

CASE函数在制作报表的时候非常有用。比如表T_Customer中的FLevel字段是整数类型,它记录了客户的级别,如果为1则是VIP客户,如果为2则是高级客户,如果为3则是普通客户,在制作报表的时候显然不应该把1、2、3这样的数字显示到报表中,而应该显示相应的文字,这里就可以使用CASE函数进行处理,SQL语句如下:

SELECT
FName,
(CASE FLevel
WHEN 1 THEN 'VIP客户'
WHEN 2 THEN '高级客户'
WHEN 3 THEN '普通客户'
ELSE '客户类型错误'
END) as FLevelName
FROM T_Customer

2、用法二

上边一节中介绍的CASE语句的用法只能用来实现简单的“等于”逻辑的判断,要实现
“如果年龄小于18则返回‘未成年人’,否则返回‘成年人’”是无法完成的。值得庆幸的是,CASE函数还提供了第二种用法,其语法如下:

CASE
WHEN condion1 THEN return value1
WHEN condion2 THEN return value2
WHEN condion3 THEN return value3
……
ELSE defaultreturnvalue
END

//判断一个人的体重是否正常,如果体重小于40则认为太瘦,而如果体重大于50则认为太胖,介于40和50之间则认为是正常
SELECT
FName,
FWeight,
(CASE
WHEN FWeight<40 THEN 'thin'
WHEN FWeight>50 THEN 'fat'
ELSE 'ok'
END) as isnormal
FROM T_Person

执行完毕我们就能在输出结果中看到下面的执行结果:
FNAME FWEIGHT ISNORMAL
Tom 56.67 fat
Jim 36.17 thin
Lily 40.33 ok
Kelly 46.23 ok
Sam 48.68 ok
Kerry 66.67 fat
Smith 51.28 fat
BillGates 60.32 fat

以上摘自《程序员的SQL金典》

TAG: 数据库

 

评分:0

我来说两句

Open Toolbar