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 empno,ename,(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) 编辑 收藏 举报