oracle中DECODE与CASE的用法区别
对于CASE与DECODE其实并没有太多的区别,他们都是用来实现逻辑判断。Oracle的DECODE函数功能很强,灵活运用的话可以避免多次扫描,从而提高查询的性能。而CASE是9i以后提供的语法,这个语法更加的灵活,提供了IF
THEN ELSE的功能。想要知道他们具体的用法,我们先来看看他们的语法:
CASE表达式语法:
CASE还有另外一种语法:
DECODE语法就相对简单的多,DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返then1,...,如果不等于任何一个if值,则返回else。可以用函数或表达式来替代value,if,then,else从而作出一些更有用的比较。
从上面的语法可以看出CASE的语法一与DECODE更多的是用于等值判断,可以这么说decode只能做等值的,case when可以做区间的,使用范围来进行条件区分,decode能做到的,case
when也能做到;如果想要用decode进行比较,则需要用到sign()函数。因此二者在固定比较条件时使用差不多。但是如果当比较条件不固定时,显然case when会容易很多。
我们可以通过以下的例子来具体的了解他们的用法
上面两个是用CASE的两种语法来实现的,这种等值的比较,我们也可以用DECODE来实现,但需要注意的是DECODE必须用在SQL语句中
这三个均实现的都是向前台输出c。可以看出decode像是case when的精简版,当要实现的功能比较简单时,用decode方便,简洁.当decode满足不了的时候我们可以用case来解决问题。就像不等值的比较
对于上面的例子依然输出c,i是进行的不等值比较,需要使用的case表达式,不然则需要使用sign()配合使用。对于上面的CASE语句,需要说明一点
这时输出的是a,那是因为CASE语句寻找when的优先级是从上到下。再多的when,也只有一个出口,即其中有一个满足了expr就马上退出case,这点需要牢记。
在此需要说明一点decode是oracle独有的, case when是标准SQL的语法,mysql等其他版本数据库中都可以使用。
实际情况中,我们经常会遇到纵表横表相互转化的问题,这时就需要用到DECODE函数来实现的,具体实现的方法,我们下次再说。
oracle中DECODE与CASE的用法区别的更多相关文章
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
- oracle中decode的一些巧妙用法
1.符号函数sign在decode中的用法--比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0 ...
- 1.oracle中decode的一些巧妙用法
1.符号函数sign在decode中的用法--比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值sign()函数根据某个值是0 ...
- Oracle 中 decode 函数用法
Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译 ...
- 分组函数group by和Oracle中分析函数partition by的用法以及区别
1.分组函数group by和Oracle中分析函数partition by的用法以及区别 2.开窗函数.
- Oracle中执行存储过程call和exec区别
Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...
- html中的alt和title用法区别
html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...
- Oracle中Blob和Clob类型的区别与操作
Oracle中Blob和Clob类型 1.Oracle中Blob和Clob类型的区别 BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的 ...
- Oracle中Union与Union All的区别(适用多个数据库)
Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...
随机推荐
- tranform-scale 缩小元素,移上去文字抖动
元素缩小后,鼠标移上去之后文字会出现抖动, -webkit-transform:scale(0.5); 修复代码如下: *{ -webkit-backface-visibility: hidden; ...
- Git使用简介
git创建分支并直接切换到分支:git checkout -b name git提交分支到远程服务器: git push origin name/git push origin name:name ...
- Codeforces Round #207 (Div. 1)B(数学)
数学so奇妙.. 这题肯定会有一个循环节 就是最小公倍数 对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 #include <iostream> #include< ...
- 进程间通信的WM_COPYDATA的使用
http://blog.csdn.net/ao929929fei/article/details/6316174 接收数据的一方 ON_WM_COPYDATA() afx_msg BOOL OnCop ...
- 函数 xdes_get_descriptor_with_space_hdr
获得区描述符 xdes entry 的offset /********************************************************************//** ...
- Asp.Net MVC Views页面不包含“GetEnumerator”的公共定义
“/”应用程序中的服务器错误. 编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误.请检查下列特定错误详细信息并适当地修改源代码. 编译器错误消息: CS1579: “Web.Model ...
- 解析CSS加密技术之“障眼法”
CSS(Cascading Style Sheet,可译为“层叠样式表”或“级联样式表”)是一组格式设置规则,用于控制Web页面的外观.通过使用CSS样式设置页面的格式,可将页面的内容与表现形式分离. ...
- 物联网操作系统HelloX开发者入门指南
HelloX开发者入门指南 HelloX是聚焦于物联网领域的操作系统开发项目,可以通过百度搜索"HelloX",获取详细信息.当前开发团队正在进一步招募中,欢迎您的了解和加入.如果 ...
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
原因是: DDrawSurface 丢失, DDraw表面在很多情况下都会丢失(如:启动其他全屏独占程序,屏保,或锁屏时), 表面丢失其实就是表面所使用的内存或显存被DirectDraw系统释放, 分 ...
- Android UI——分享一个登录缓冲界面
效果如上图 所示 :就是下面的 loading 字母会按顺序一个个的 动起来 ,很好的效果 代码说明 请参考 该文:http://blog.csdn.net/xyz_lmn/article/deta ...