怎么在oracle中使用decode函数

54次阅读
没有评论

共计 2677 个字符,预计需要花费 7 分钟才能阅读完成。

自动写代码机器人,免费开通

今天就跟大家聊聊有关怎么在 oracle 中使用 decode 函数,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

1: 使用 decode 判断字符串是否一样

DECODE(value,if1,then1,if2,then2,if3,then3,…,else)

含义为
IF 条件 = 值 1 THEN
RETURN(value 1)

ELSIF 条件 = 值 2 THEN
RETURN(value 2)
……

ELSIF 条件 = 值 n THEN
RETURN(value 3)
ELSE
RETURN(default)
END IF

sql 测试

select empno,decode(empno,7369, smith ,7499, allen ,7521, ward ,7566, jones , unknow) as name from emp where rownum =10

输出结果

7369 smith
7499 allen
7521 ward
7566 jones
7654 unknow
7698 unknow
7782 unknow
7788 unknow
7839 unknow
7844 unknow

2: 使用 decode 比较大小

select decode(sign(var1-var2),-1,var 1,var2) from dual

sign() 函数根据某个值是 0、正数还是负数,分别返回 0、1、-1

sql 测试

select decode(sign(100-90),-1,100,90) from dual

输出结果

90

100-90=10 0 则会返回 1,所以 decode 函数最终取值为 90

反正

select decode(sign(100-90),1,100,90) from dual

输出结果

100

100-90=10 0 返回 1, 判断结果为 1,返回第一个变量 100,最终输出结果为 100

3: 使用 decode 函数分段

工资大于 5000 为高薪,工资介于 3000 到 5000 为中等,工资小于 3000 为低薪

sql 测试

SELECT 
 ename,sal,
 DECODE(SIGN(sal - 5000),
 1,
  high sal ,
 0,
  high sal ,
 - 1,
 DECODE(SIGN(sal - 3000),
 1,
  mid sal ,
 0,
  mid sal ,
 - 1,
 DECODE(SIGN(sal - 1000),
 1,
  low sal ,
 0,
  low sal ,
 - 1,
  low sal )))
 emp

输出结果

SMITH 800 low sal
ALLEN 1600 low sal
WARD 1250 low sal
JONES 2975 low sal
MARTIN 1250 low sal
BLAKE 2850 low sal
CLARK 2450 low sal
SCOTT 3000 mid sal
KING 5000 high sal
TURNER 1500 low sal
ADAMS 1100 low sal
JAMES 950 low sal
FORD 3000 mid sal
MILLER 1300 low sal

4: 利用 decode 实现表或者试图的行列转换

sql 测试

SELECT 
 SUM(DECODE(ENAME, SMITH ,SAL,0)) SMITH,
 SUM(DECODE(ENAME, ALLEN ,SAL,0)) ALLEN,
 SUM(DECODE(ENAME, WARD ,SAL,0)) WARD,
 SUM(DECODE(ENAME, JONES ,SAL,0)) JONES,
 SUM(DECODE(ENAME, MARTIN ,SAL,0)) MARTIN FROM EMP

输出结果如下

SMITH ALLEN WARD JONES MARTIN
 800 1600 1250 2975 1250

5: 使用 decode 函数来使用表达式来搜索字符串

decode (expression, search_1, result_1, search_2, result_2, …., search_n, result_n, default)

decode 函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回 default 值;如果未定义 default 值,则返回空值。

sql 测试

SELECT 
 ENAME,
 SAL,
 DECODE(INSTR(ENAME,  S),
 0,
  不含有 s ,
  含有 s ) AS INFO
 EMP

输出结果

SMITH 800  含有 s
ALLEN 1600  不含有 s
WARD 1250  不含有 s
JONES 2975  含有 s
MARTIN 1250  不含有 s
BLAKE 2850  不含有 s
CLARK 2450  不含有 s
SCOTT 3000  含有 s
KING 5000  不含有 s
TURNER 1500  不含有 s
ADAMS 1100  含有 s
JAMES 950  含有 s
FORD 3000  不含有 s
MILLER 1300  不含有 s 

Decode 函数在实际开发中非常的有用

结合 Lpad 函数,如何使主键的值自动加 1 并在前面补 0

select LPAD(decode(count( 记录编号),0,1,max(to_number( 记录编号)+1)),14, 0 ) 记录编号 from tetdmis

eg:

select decode(dir,1,0,1) from a1_interval

dir 的值是 1 变为 0,是 0 则变为 1

比如我要查询某班男生和女生的数量分别是多少?

通常我们这么写:
select count(*) from 表 where 性别 = 男;
select count(*) from 表 where 性别 = 女;

要想显示到一起还要 union 一下,太麻烦了

用 decode 呢,只需要一句话

select sum(decode( 性别,男,1,0)),sum(decode( 性别,女,1,0)) from 表

eg:

select sum(decode(siteno, LT ,1,0)),sum(decode(siteno, SZ ,1,0)) from facd605;
select sum(case siteno when  LT  then 1 else 0 end),sum(case siteno when  SZ  then 1 else 0 end) from facd605;

看完上述内容,你们对怎么在 oracle 中使用 decode 函数有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计2677字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)