首页 > 技术文章 > Oracle 一些函数的使用

l919310075 2017-07-31 17:44 原文

nvl 函数

      通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值 

 
selectnvl(sum(t.dwxhl),1)fromtb_jhdetwherezydm=-1

  这里关心的nvl的用法,nvl(arg,value)代表如果前面的arg的值为null那么返回的值为后面的value

ESCAPE

escape关键字经常用于使某些特殊字符,如通配符:‘%’,‘——’转义为他们原来的字符的意义,被定义的转义字符通常使用‘\’,但是有时候也可以使用其他符号。

转义字符为d,没有实现转义功能;

SQL>select*fromtestwheretestlike'sddd_%'escape'd';

  查找包含所有'_'的字段。

 
SQL>select*fromtestwheretestlike'%\_%'escape'\';

 连接字符串 concat || 

 
 
--concat只能连接两个字符串,连接多个需要嵌套调用不方便
SQL>selectconcat('aa','bb')fromdual;
 
CONCAT('AA','BB')
-----------------
aabb
--||直接连接多个字符串
SQL>select'aa'||'bb'||'cc'fromdual;
 
'AA'||'BB'||'CC'
----------------
aabbcc
 

 

 

字符串截取 

    substr(字符串,截取开始位置,截取长度) //返回截取的字 

substr('HelloWorld',0,1)//返回结果为'H'*从字符串第一个字符开始截取长度为1的字符串

  长度计算函数 length()与lengthb()

SQL>selectlength('新春快乐')fromdual;
LENGTH('新春快乐')
------------------

SQL>selectlengthb('新春快乐')fromdual;
LENGTHB('新春快乐')
-------------------
 
区别:length求得是字符长度,   
 lengthb求得是字节长度。 ​

 INSTR函数

-- 在指定的字符串中检索指定字符所在的索引位置

 
  
SQL>selectinstr('hello','l')fromdual;
INSTR('HELLO','L')
------------------

在hellowolrd中截取出来world字符串?
SQL>selectsubstr('helloworld',instr('helloworld',''))fromdual;
 
SUBSTR
------
world
 
已选择1行。
 
SQL>selectsubstr('helloworld',instr('helloworld','')+1)fromdual;
 
SUBST
-----
world
 
已选择1行。
 
 
lpad() rpad()

参数1:指定原始的串 参数2:固定长度 参数3:填充的字符 

SQL>selectlpad('jack',10,'$')fromdual;
LPAD('JACK',10,'$')
----------
$$$$$$jack
selectrpad('jack',10,'$')fromdual;
-----------
jack$$$$$$
 

 

 Next_day

计算出来下一个星期一是几号?

 
selectnext_day(sysdate,'星期一')fromdual;

round 四舍五入

NVL (expr1, expr2):

    expr1为NULL,返回expr2;不为NULL,返回expr1。注意两者的类型要一致 
NVL2 (expr1, expr2, expr3) :

    xpr1不为NULL,返回expr2;为NULL,返回expr3。expr2和expr3类型不同的话,expr3会转换为expr2的类型 
NULLIF (expr1, expr2):

    相等返回NULL,不等返回expr1

decode()

    主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);

使用方法:

Select decode(columnname,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

From talbename

Where …

其中columnname为要选择的table中所定义的column,

·含义解释:

decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)的理解如下:

 
 
if==1
then
return(1)
elsif==2
then
return(2)
......
elsif==n
then
return(n)
else
return()
endif
 
 

注:其中缺省值可以是你要选择的column name 本身,也可以是你想定义的其他值,比如Other等;

表复制快速的建立的表结构?

    create table emp10 as select * from emp where 1=12;

    insert into emp30 select * from emp where deptno=30;

 

推荐阅读