orcale的函数

1,字符截取函数
substr()
	 1、select substr('HelloWorld',0,3) value from dual; //返回结果:Hel,截取从“H”开始3个字符
	 2、select substr('HelloWorld',1,3) value from dual; //返回结果:Hel,截取从“H”开始3个字符
	 3、select substr('HelloWorld',2,3) value from dual; //返回结果:ell,截取从“e”开始3个字符
	 4、select substr('HelloWorld',0,100) value from dual; //返回结果:HelloWorld,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。
	 5、select substr('HelloWorld',5,3) value from dual; //返回结果:oWo
	 6、select substr('Hello World',5,3) value from dual; //返回结果:o W (中间的空格也算一个字符串,结果是:o空格W)
	 7、select substr('HelloWorld',-1,3) value from dual; //返回结果:d (从后面倒数第一位开始往后取1个字符,而不是3个。原因:下面红色 第三个注解)
	 8、select substr('HelloWorld',-2,3) value from dual; //返回结果:ld (从后面倒数第二位开始往后取2个字符,而不是3个。原因:下面红色 第三个注解)
	 9、select substr('HelloWorld',-3,3) value from dual; //返回结果:rld (从后面倒数第三位开始往后取3个字符)
	10、select substr('HelloWorld',-4,3) value from dual; //返回结果:orl (从后面倒数第四位开始往后取3个字符)
2,case end
 1.简单case语句
语法:
   case exp when comexp then returnvalue
            ...
            when comexp then returnvalue
            else returnvalue
    end
      
  case到end之间相当于一个具体的值,可以做运算,取别名,嵌套case 等等。
  只要把case到end当作一个运算结果的表达式就可以了。

举例:
   select cust_last_name,
          case credit_limit when 100 then 'low'
                            when 5000 then 'high'
                            else 'medium'
          end
     from customers;
     
2.搜索case语句
语法:
    case when boolean then return value
         ...
         when boolean then return value
         else retur nvalue
     end
     
举例:
select case when id between 1 and 10 then 'low'
            when id between 20 and 30 then 'mid'
            when id between 40 and 50 then 'high'
            else 'unknow'
       end
from product;

--简单case和搜索case之间的区别:
1. 简单case只能是when后面的表达式完全匹配case后的表达式,相当于 =,所以也不能匹配null。
2. searched case可以作为比较条件,那么可以使用like、!=、between ..and、<、=、is null、is not null等,比简单case的使用更加广泛,完全可以替代简单case。

--注意事项:
1.case 表达式返回的是一个确定的value,若前面的都不匹配,则返回else中的项.
2.简单case 中的表达式,when 后面的表达式类型应该全部保持一致.
3.所有的then 后面的return_value类型要保持一致.
4.对于简单case 表达式,也就是case 表达式 when…那么when null 总是取不到。也就是case 后面的表达式如果值为null,不会与when null 匹配,只会与else匹配.
5.对于searched case来说,有自动类型转换,只要条件成立就可以。
如:select case when 1='1' then 1 end from dual; 其中1='1'条件成立

值得一提的是: sql中的case语句与pl/sql中的case语句的不同之处:
前者的else不是必须的,如果没有匹配就返回null;后者的else不写,则报case_not_found异常.

--case中嵌套子查询
Case语句中可以使用子查询,但是必须返回一行,不可以是多行.
如:
select case (select count(*) as s1 from t1 where a = 1)
           when (select count(*) as s2 from t1, t2 where t1.a = t2.a and t2.a = 1) then '相等'
           else '不相等'
       end
  from dual;
3,字符查找函数
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”的位置
4,判断某个值是否为空
nvl()

	作用:判断某个值是否为空值,若不为空值则输出,若为空值,返回指定值。

	详细解释如下:
	
	1、nvl()函数的格式如下:NVL(expr1,expr2);
	
	2、含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
	
	3、例:select name,NVL(name,-1) from user;运行后,结果返回两列数值,若name为空,则返回-1,若name不为空值,则返回其自身。
5,case when then decode函数的用法
decode函数:
decode(条件,值1,返回值1,值2,返回值2,…….,缺省值)
一个Update语句:把表中某个字段的值进行更改,这条语句是把值为“1”的都改成“8”,“0”改成“9”

update tablename set 字段名= decode(字段名,1,8,0,9)  where 字段名 in (1, 0);
1
case…when…then:
– 写法一:
case(条件)
when 值1 then 返回值1
when 值2 then 返回值2
else 缺省值
– 写法二:
case when 条件1 then 返回值1
when 条件2 then 返回值2
else 缺省值
end;
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值