case when和decode的问题

[复制链接]
查看11 | 回复6 | 2014-2-19 11:55:14 | 显示全部楼层 |阅读模式
感觉case when的功能似乎跟decode是一样的,不知它们之间有什么区别呢?另:case when好像不能加elsif吧,还是我弄错了,请高人指点一下。最好介绍一下case when的格式及其用法 谢谢
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
case (when.....then ......) else ... end
括号内部分可以重复,不过连上else只能是28个
decode后面可以有255个
decode只能判断等于
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
最初由 lastwinner 发布
[B]decode只能判断等于 [/B]

呵呵,容易误解,
用法:
decode(exp1,n1,r1,n2,r2,...,default)
if exp1 = n1 then r1
elseif exp1 = n2 then r2
elseif exp1 = n3 then r3
...
else
default
如果利用decode()判断不等问题,一般结合sign()
比如:salary > 1000 时,标记为'High';salary < 1000 时,标记为'Low'
decode(sign(salary - 1000),1,'High',-1,'Low')
lastwinner的相等是这个意思.
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
谢谢两位,如果一个select语句两种方法都可以用的话,是decode速度快 还是case when的速度快呢?
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
应该差不多
特别注明,在8i的文档中,两个都是表达式,decode不是函数
并且还特别注明:
A DECODE expression uses the special DECODE syntax……
而在9i的文档中,把decode归到了函数,case仍然是表达式
两个版本的文档中对decode的描述基本没有差别,只是把expression换成了function
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
另外,好像二者在处理中文方面有区别的,case的结果可能有乱码。
此外,如果用到隐式数据类型转换,那么case和decode的结果也是不同的,估计是因为一个是表达式一个是函数
回复

使用道具 举报

千问 | 2014-2-19 11:55:14 | 显示全部楼层
再次感谢各位
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行