oracle数据库特有函数,Oracle特有函数 decode, case when then, nvl, instr

decode函数

318920473de3bb45a25fce0b7abb26c1.png

6c90a4b607430d51491028c00555dc39.png

063a9ce9eec3df22fc4ed75b7b19d09d.png

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

decode(X,A,B,C,D,E)

这个函数运行的结果是,当X = A,函数返回B;当X != A 且 X = C,函数返回D;当X != A 且 X != C,函数返回E。 其中,X、A、B、C、D、E都可以是表达式,这个函数使得某些sql语句简单了许多。

例如 :

decode (X,"1","张三",""2","李四","王五") as name;

x=1 name="张三",

x=2 name="李四"

x等于其他 name="王五"

869e4ec3fd65d3bdf694429c27716011.png

2、 使用decode函数比较大小

0de361c66f3fb3e78d4faa89bf917bf2.png

3、 使用decode函数分段

9ade4f59ef8683e719541452b4929905.png

nvl函数 空值处理函数

1 nvl函数

NVL(E1, E2)的功能为:如果E1为NULL,则函数返回E2,否则返回E1本身。

e8b02546978f0cac29aefc67f4e40923.png

0dd41042567df3b4cccc130ee06331eb.png

2 nvl2函数

NVL2(E1, E2, E3)的功能为:如果E1为NULL,则函数返回E3,否则返回E2。

a6b0c5ef0f6af5f6a741ebaa8bbd8bea.png

0c90587b030b2a30be4e2f2aa2374354.png

instr函数

1 格式一:

instr(源字符串, 目标字符串)

1 select instr('helloworld','l') from dual; --返回结果:3 默认第一次出现“l”的位置 2 select instr('helloworld','lo') from dual; --返回结果:4 即:在“lo”中,“l”开始出现的位置

2 格式二:

instr(源字符串, 目标字符串, 起始位置, 匹配序号)

1 select instr('helloworld','l',2,2) from dual; --返回结果:4 也就是说:在"helloworld"的第2(e)号位置开始,查找第二次出现的“l”的位置

2 select instr('helloworld','l',3,2) from dual; --返回结果:4 也就是说:在"helloworld"的第3(l)号位置开始,查找第二次出现的“l”的位置

3 select instr('helloworld','l',4,2) from dual; --返回结果:9 也就是说:在"helloworld"的第4(l)号位置开始,查找第二次出现的“l”的位置

4 select instr('helloworld','l',-1,1) from dual; --返回结果:9 也就是说:在"helloworld"的倒数第1(d)号位置开始,往回查找第一次出现的“l”的位置

5 select instr('helloworld','l',-2,2) from dual; --返回结果:4 也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第二次出现的“l”的位置

6 select instr('helloworld','l',2,3) from dual; --返回结果:9 也就是说:在"helloworld"的第2(e)号位置开始,查找第三次出现的“l”的位置

7 select instr('helloworld','l',-2,3) from dual; --返回结果:3 也就是说:在"helloworld"的倒数第2(l)号位置开始,往回查找第三次出现的“l”的位置

*

3 格式三: (重要)

MySQL中的模糊查询 like 和 Oracle中的 instr() 函数有同样的查询效果

select * from user u where 1=1

and instr(u.DETAIL_ORG_NAME,#{orgName,jdbcType=VARCHAR})>0

MySQL: select * from tableName where name like '%helloworld%';

Oracle:select * from tableName where instr(name,'helloworld')>0; --这两条语句的效果是一样的

工作中实际接触到的sql语句如下:

select project.PROJECT_ID as projectId,

project.PROJECT_NAME as projectName

from BDT_BUSINESS_PROJECT

where PROJECT_LIBRARY_LIBRARY_ID = '1'

and STATUS = '0'

and PROV_ORG_CODE =#{h_provOrgCode,jdbcType=VARCHAR}

and instr(PROJECT_NAME,#{projectName,jdbcType=VARCHAR})>0

#{respCenterLevel}

oracle中的case when then else end 用法

1 第一种写法

3b3edd960a14678b74457f13d6e280ec.png

2 第二种写法

d66fab02bef823223687856d59853989.png

向oracle数据库某张表内添加新字段

如下图所示:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值