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;