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;