Oracle中的decode函数的学习
- 格式:pdf
- 大小:54.43 KB
- 文档页数:4


Oracle函数-DECODEDECODE翻译为解码或译码,因为它可以把查询结果翻译成令⽤户容易理解的内容。
语法:expr: 表达式search:搜索值result:结果值default:默认值DECODE函数的第⼀个参数是表达式,之后是成对的搜索值-结果值,最后是⼀个默认值。
参数可以是任何数字类型或字符类型。
DECODE函数的作⽤是把表达式的的值与⼀些列搜索值⽐较,当表达式的值与搜索值相等时,返回搜索值对应的结果值,如果没有找到相等的搜索值,则返回默认值,如果默认值没有定义,返回NULL。
执⾏逻辑跟CASE语句很相似。
参数类型的处理⽅式如下:如果表达式和搜索值是字符数据,Oracle采⽤nonpadded semantics⽐较它们。
结果值是VARCHAR2类型,并与第⼀个结果值的字符集相同。
如果第⼀对搜索值-结果值为数字类型,Oracle会⽐较所有的搜索值-结果值及表达式,按数字优先级来决定参数类型,并把其它参数的类型转换为该类型。
搜索值、结果值和默认值可以由表达式(不是指第⼀个表达式参数)计算。
Oracle数据库使⽤短路计算的⽅式,仅在⽐较每个搜索值与表达式时才结算搜索值,⽽不是⼀次计算所有的搜索值。
因此Oracle在找到等于表达式的值后,即使后⾯还有搜索值,也不会去计算它。
Oracle在⽐较表达式和每个搜索值时,先把它们转换为第⼀个搜索值得数据类型。
Oracle⾃动将返回的结果值转换为第⼀个结果值的数据类型。
如果第⼀个结果值的数据类型为CHAR或NULL,那么Oracle会将结果值转换为VARCHAR2。
在DECODE函数中,Oracle认为两个NULL值是相等的,如果表达式为NULL,Oracle返回第⼀个为NULL的搜索值的结果值。
DECODE参数的最⼤数量为255个。
下⾯的例⼦演⽰了DECODE函数的使⽤。
DECODE将warehouse_id的值翻译成容易理解的字符串。
如果warehouse_id的值是1,函数返回Southlake,如果warehouse_id的值是2,函数返回San Francisco。
Oracle语句decode用法一、概述d e c o d e在Or ac le数据库中,函数是一个非常常用的函数,用于实现条件判断和条件赋值。
它的语法非常简单,可以帮助我们更加灵活地处理数据。
二、语法D E CO DE(e xp r,se arc h1,re su lt1[,s ear c h2,r es ul t2,...][,d ef a u l t])e x p r-:要判断的表达式,通常是一个字段或表达式;s e a r c h1,s e a r c h2,...-:待比较的值;r e s u l t1,r e s u l t2,...-:e xp r与se ar c h值相等时的返回结果;d e f a u l t-(可选):当ex pr与所有s ea r ch值都不相等时的返回结果。
三、示例1.单条件判断假设我们有一个员工表(em pl oy ee s),包含员工的姓名(na m e)和性别(g en de r)两个字段。
我们想要根据员工的性别显示不同的称谓,可以使用de co de函数来实现:S E LE CT na me,D EC ODE(ge nd er,'M','先生','F','女士')AS sa lu ta ti onF R OM em pl oy ee s;在以上示例中,当ge n de r为'M'时,返回'先生',当g en de r为'F'时,返回'女士'。
2.多条件判断如果我们想要根据员工的级别(l ev el)显示不同的薪资加薪额度,可以通过多个条件来实现:S E LE CT na me,l ev el,D EC OD E(le ve l,'A',1000,'B',800,'C',500,'D',300,0)AS sa lar y_i nc re as eF R OM em pl oy ee s;在以上示例中,当le v el为'A'时,返回1000,当l ev el为'B'时,返回800,以此类推。
Oracle中decode函数⽤法1.decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IF⽰例:SELECT ID,DECODE(inParam,'para1','值1' ,'para2','值2','para3','值3','para4','值4','para5','值5') name FROM bank #如果第⼀个参数inParam=='para1'那么那么select得到的那么显⽰为值1;#如果第⼀个参数inParam=='para2'那么那么select得到的那么显⽰为值2;#如果第⼀个参数inParam=='para3'那么那么select得到的那么显⽰为值3;#如果第⼀个参数inParam=='para4'那么那么select得到的那么显⽰为值4;#如果第⼀个参数inParam=='para5'那么那么select得到的那么显⽰为值5;#都不相等就为''2.decode(字段或字段的运算,值1,值2,值3)这个函数运⾏的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多⽰例:SELECT ID,DECODE(inParam,'beComparedParam','值1' ,'值2') name FROM bank#如果第⼀个参数inParam=='beComparedParam',则select得到的name显⽰为值1,#如果第⼀个参数inParam!='beComparedParam',则select得到的name显⽰为值2select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较⼩值sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1例如:变量1=10,变量2=20则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较⼩值的⽬的。
1 Oracle 中decode 函数用法 Oracle 中decode 函数用法 Oracle 中 decode 函数用法 含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF decode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3 当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多 2
使用方法: 1、比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual; --取较小值 sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 例如: 变量1=10,变量2=20 则sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。 2、此函数用在SQL语句中,功能介绍如下: Decode函数与一系列嵌套的 IF-THEN-ELSE语句相似。base_exp与compare1,compare2等等依次进行比较。如果base_exp和 第i 个compare项匹配,就返回第i 个对应的value 。如果base_exp与任何的compare值都不匹配,则返回default。每个compare值顺次求值,如果发现一个匹配,则剩下的compare值(如果还有的话)就都不再求值。一个为NULL的base_exp被认为和NULL compare值等价。如果需要的话,每一个compare值都被转换成和第一个compare 值相同的数据类型,这个数据类型也是返回值的类型。 Decode函数在实际开发中非常的有用 结合Lpad函数,如何使主键的值自动加1并在前面补0 select LPAD(decode(count(记录编号),0,1,max(to_number(记录编号)+1)),14,'0') 记录编号 from tetdmis 3