Oracle函数

SELECT instr('syranmo','s') FROM dual; -- 返回 1
SELECT instr('syranmo','ra') FROM dual;  -- 返回 3

1.1字符函数

UPPER()

LOWER(‘’)

INITCAP(‘’)将单词第一个字母大写

CONCAT(‘’,’’)

SUBSTR(‘hello’,0|1,3长度)0和1的效果是一样的

SUBSTR(‘hello’,-1,3长度)负数表示倒着截取

LENGTH()

REPLACE(‘hello’,’l’,’x’)

1.2数值函数

四舍五入:ROUND()

SELECT round(199.99) from dual;//200

select round(199.99,2) from dual;//199.99

select round(789.536,-2) from dual;//800

截断小数位:TRUNC()不四舍五入

select trunc(789.536) from dual;//789

select trunc(789.536,2) from dual;//789.53

select trunc(789.536,-2) from dual;//700

取余:MOD()

select  mod(10,3) from dual;//1

 

1.3日期函数

日期+数字=日期

日期-数字=日期

日期-日期=数字(天数)

Select sysdate from dual;//显示当前时间

MONTHS_BETWEEN():求出给定日期范围的月数

SELECT empno,ename,ROUND(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;

ADD_MONTHS():在指定日期上加上指定的月数,求出之后的日期

SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL;

NEXT_DAY():下一个的今天是哪个日期

SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;

LAST_DAY():求出给定的日期的最后一天日期

SELECT LAST_DAY(SYSDATE) FROM DUAL;

1.4转换函数

TO_CHAR

select empno,ename,TO_CHAR(hiredate,'yyyy-mm-dd') from emp;

 

如果是五月则会用05表示,0称为前导如果不希望显示0则可以使用fm去掉

select empno,ename,TO_CHAR(hiredate,'fmyyyy-mm-dd') from emp;

select empno,ename,TO_CHAR(sal,'99,999') from emp;

 

钱的单位

$美元,L当地的单位

select empno,ename,TO_CHAR(sal,'$99,999') from emp;

 select empno,ename,TO_CHAR(sal,'L99,999') from emp;

 

TO_NUMBER

select TO_NUMBER('123')+TO_NUMBER('123') from dual;

 

TO_DATE

select TO_DATE('2009-12-06','yyyy-mm-dd') from dual;

1.5通用函数

 

实例:求雇员的年薪(sal+comm*12

Select empnoename,(sal+comm*12 from emp

 

结果有的为空,因为comm有的为空。那么可以使用NVL函数将NULL 变为指定的内容。

select empno,ename,(sal+NVL(comm,0)) from emp;

 

DECODE()函数类似于if。。。else

语法

DECODE(col/expression,search1,result1,search2,result2,[…])

select decode(1,1,'内容是1',2,'内容是2',3,'内容是3') from dual;

select empno 雇员号,ename 雇员姓名,hiredate 雇佣日期,DECODE(job,'CLERK','职员','SALESMAN','销售人员','MANAGER','经理','ANALYST','分析员','PRESIDENT','总裁') from emp;

posted on 2014-04-26 22:01  Sunny_NUAA  阅读(206)  评论(0编辑  收藏  举报

导航