Oracle中常用函数总结

来源:互联网 发布:linux怎么设置ip地址 编辑:程序博客网 时间:2024/06/07 04:20

1.模糊查询like

%表示零或多个字符
_表示一个字符
对于特殊符号可以使用ESCAPE标识符来查找
select * from emp where ename like '%*_%'escape'*';
上面的escape表示*后面的字符不被当作特殊字符处理,就是普通的'_'符。

-------------------------------------------下面才是正题-----------------------------------------------------

2.字符函数的使用

[sql] view plain copy
  1. Upper 将字符串转为大写  
  2.     select Upper('aabbcc'from dual;  
  3.     select * from emp where ename=UPPER('smith');  
  4.       
  5.     Lower 将字符串转为小写  
  6.     select Lower('AABBCC'from dual;  
  7.     select * from emp where ename=LOWER('SMITH');  
  8.       
  9.     initcap 返回字符串并将首字母转为大写  
  10.     select initcap(ename) from emp;  
  11.       
  12.     Concat 将后一个字符串连接到前一个字符串的尾部  
  13.     select concat('a','b'from dual;  
  14.     select 'a' || 'b' from dual;  
  15.       
  16.     Substr 返回截取的字符串  
  17.     Substr(字符串,截取开始位置,截取长度)  
  18.     substr('Hello World',0,1) --返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串  
  19.     substr('Hello World',1,1) --返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符  
  20.     substr('Hello World',2,4) --返回结果为 'ello'  
  21.     substr('Hello World',-3,3) --返回结果为 'rld' *用负数则从右边开始数第几个位置,截取仍然是从左往右截取  
  22.     测试:  
  23.     select substr('Hello World',-3,3) value from dual;  
  24.       
  25.     length 返回字符串的长度  
  26.     select length(ename) from emp;  
  27.       
  28.     replace 替换字段中指定的字符串  
  29.     replace(原字段,“原字段旧内容“,“原字段新内容“,)  
  30.     select replace(ename,'a','A'from emp;  
  31.       
  32.     instr 在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置。   
  33.     instr(sourceString,destString,start,appearPosition)   
  34.     其中sourceString代表源字符串;   
  35.     destString代表要从源字符串中查找的子串;   
  36.     start代表查找的开始位置,这个参数可选的,默认为1;   
  37.     appearPosition代表想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1   
  38.     如果start的值为负数,则代表从右往左进行查找,但是位置数据仍然从左向右计算。   
  39.     返回值为:查找到的字符串的位置。   
  40.     select instr('Hello World','or'from dual; --返回结果:8 indexOf  
  41.       
  42.     Lpad   
  43.     lpad( string, padded_length, [ pad_string ] )  
  44.     string  
  45.   准备被填充的字符串;  
  46.   padded_length  
  47.   填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,lpad函数将会把字符串截取成从左到右的n个字符;  
  48.   pad_string  
  49.   填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,lpad函数将会在string的左边粘贴空格。  
  50.     lpad('Smith',10,'*')  --返回结果:*****Smith  
  51.       
  52.     Rpad  
  53.     rpad(string,padded_length,[pad_string])  
  54.     string  
  55.   被填充的字符串  
  56.   padded_length  
  57.   字符的长度,是返回的字符串的数量,如果这个数量比原字符串的长度要短,rpad函数将会把字符串截取成从左到右的n个字符;  
  58.   pad_string  
  59.   是个可选参数,这个字符串是要粘贴到string的右边,如果这个参数未写,lpad函数将会在string的右边粘贴空格。  
  60.     Rpad('Smith',10,'*')  --返回结果为 Smith*****  
  61.       
  62.     Trim 过滤掉首尾空格  
  63.     select trim(' Mr Smith 'from dual;--返回结果:Mr Smith  

3.数值函数

[sql] view plain copy
  1. Round  
  2.     将参数n按照n2指定的小数位进行四舍五入.不指定n2时默认n2为0,即近似到个位.如果第2个参数为负数时将对小数点左边的数作四舍五入,回到左面的|n|+1位.  
  3.     select round(345.678,2) from dual; --四舍五入到百分位(小数点后第2位)  
  4.     select round(412,-2) from dual; --返回结果:400  
  5.     select round(412.313,-2) from dual; --返回结果:400  
  6.       
  7.     Mod(n,n2)  
  8.     返回参数n除以参数n2时的余数.  
  9.     select mod(10,2) from dual; -- 返回结果:0  
  10.       
  11.     TRUNC(n,n2) 函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。  
  12.     第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此类推。   
  13.     TRUNC(89.985,2)=89.98  
  14.   TRUNC(89.985)=89  
  15.   TRUNC(89.985,-1)=80  

4.日期函数

[sql] view plain copy
  1. MONTHS_BETWEEN(DATE1,DATE2) 即MONTHS_BETWEEN(日期1,日期2)    函数返回两个日期之间的月份数。如果两个日期月份内天数相同,或者都是某个月的最后一天,返回一个整数.  
  2.     否则,返回数值带小数,以每天1/31月来计算月中剩余天数。如果日期1比日期2小 ,返回值为负数。  
  3.     例:months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.11.29','yyyy.mm.dd'))   
  4.     返回  12  
  5.     注:两个参数均为同样月份的29号,所以返回一整数。  
  6.     months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.12.24','yyyy.mm.dd'))  
  7.     返回   13.16129  
  8.     注:两个参数表示的日期不是同一天,所以返回带小数的值。  
  9.       
  10.     add_months(x,y)或者add_months(times,months)函数  
  11.     这个函数用于计算在时间x之上机上Y个月后的时间值,要是Y的值为负数的话就是在这个时间点之间的时间值(这个时间-Y个月)。  
  12.     如 select add_months(sysdate,-6) from dual;   
  13.     该查询的结果是当前时间半年前的时间  
  14.     select add_months(sysdate,6) from dual;   
  15.     该查询的结果是当前时间半年后的时间  
  16.       
  17.     NEXT_DAY(date,char)   
  18.     date参数为日期型,   
  19.     char:为1~7或Monday/Mon~Sunday/  1-星期天 2-星期一 依次类推  
  20.     select next_day(sysdate,'星期日'from dual;  --返回结果:2016.12.4 16:01:52  
  21.     select next_day(sysdate,1) from dual;  --和上面相同结果  
  22.       
  23.     LAST_DAY 函数返回指定日期对应月份的最后一天。  
  24.     select last_day(to_date('2016.11.29','yyyy.mm.dd')) from dual;  
  25.     返回结果:2016.11.30  
  26.     select last_day(to_date('2017.2.2','yyyy.mm.dd')) from dual;  
  27.     返回结果:2017.2.28  

5.转换函数

[sql] view plain copy
  1. to_char(type, text)  
  2.     type:可以为timestampintfloatnumeric格式  
  3.     text:转换的模板。如:'yyyy-mm-dd hh24:mi:ss'  
  4.       
  5.     to_date(type, text)  
  6.     用法同上相反  
  7.     select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss'from dual;   
  8.     注:很多Java程序员也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。  
  9.     原因是SQL中不区分大小写,MM和mm被认为是相同的格式代码,所以Oracle的SQL采用了mi代替分钟。  
  10.       
  11.     to_number 将字符串转换为数字数据类型  
  12.     select to_number('12')+to_number('13'from dual;  
  13.     返回结果:15  

6.通用函数

[sql] view plain copy
  1. sign(n)  
  2.     取数字n的符号,大于0返回1,小于0返回-1,等于0返回0  
  3.   
  4.     NVL(expr1,expr2)  
  5.     含义是:如果oracle第一个参数为空(null)那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。  
  6.     注:Oracle会把''转化为null。但是'' 不等于' '。  
  7.       
  8.     nvl2(expr1,expr2,expr3)  
  9.     如果 expr1 不是 null 值,则 nvl 函数返回 expr2 ,否则就返回 expr3 。参数可以返回任何数据类型的值,但是 expr2 和 expr3 不能是 LONG 型的数据类型。  
  10.     说明:若 expr2 和 expr3 的数据类型不同:  
  11.    <span style="white-space:pre">   </span> (1)若 expr2 是字符数据,则Oracle数据库在比较之前就会把 expr3 转换成 expr2 的数据类型除非 expr3 是null。在 这种情况下,隐式数据转换是不必要的。Oracle数据库返回 VARCHAR2 数据类型到 expr2 的字符集。  
  12.     <span style="white-space:pre">  </span>(2) 若 expr2 是数值型,则Oracle数据库决定哪个参数具有最高数值优先级,并把另一个参数的数据类型隐式转换成这种数据类型,并返回这种数据类型的数据。  
  13.       
  14.     NULLIF(表达式1,表达式2)  
  15.     如果表达式1和表达式2相等则返回空值,如果表达式1和表达式2不相等则返回表达式1的结果。  
  16.     注意:表达式1和表达式2应该是相同数据类型或能隐含转换成相同数据类型,表达式1不能用字符null,但''不报错。  
  17.       
  18.     COALESCE(表达式1,表达式2,...,表达式n)  
  19.     n>=2,此表达式的功能为返回第一个不为空的表达式,如果都为空则返回空值。  
  20.     注意:所有表达式必须为同一类型或者能转换成同一类型。  
  21.       
  22.     case 表达式和java中的switch 类似  
  23.     select empno,ename,sal,case deptno   
  24.                                     when 10 then '财务部'  
  25.                                     when 20 then '开发部'  
  26.                                     when 30 then '行政部'  
  27.                             else '未知部门'  
  28.                             end dept_name  
  29.     from emp;     
  30.   
  31.     DECODE(value,if1,then1,if2,then2,if3,then3,...,else)  
  32.     表示如果value等于if1时,DECODE函数的结果返then1,...,如果不等于任何一个if值,则返回else。  
  33.     可以用函数或表达式来替代value,if,thenelse从而作出一些更有用的比较。  
原创粉丝点击