SQL> --字符函数
SQL> select lower('Hello World') 转小写,upper('Hello World') 转大写,initcap('hello world') 首字母大写
2 from dual;
SQL> --substr(a,b,c) 从a中,第b位开始取,取c位
SQL> select substr('Hello World',3,4) from dual;
SQL> --length 字符数 lengthb字节数
SQL> select length('Hello World') 字符,lengthb('Hello World') 字节 from dual;
1* select length('中国') 字符,lengthb('中国') 字节 from dual
SQL> /
字符 字节
---------- ----------
2 4
SQL> --instr(a,b): 在a中,查找b
SQL> select instr('Hello World','ll') from dual;
SQL> --lpad 左填充 rpad右填充
SQL> select lpad('abcd',10,'*') 左,rpad('abcd',10,'*') 右 from dual;
左 右
---------- ----------
******abcd abcd******
SQL> --trim
SQL> select trim('H' from 'Hello WorldH') from dual;
TRIM('H'FR
----------
ello World
SQL> --replace
SQL> select replace('Hello World','l','*') from dual;
REPLACE('HE
-----------
He**o Wor*d
SQL> --四舍五入
SQL> select round(45.926,2) 一,round(45.926,1) 二,round(45.926,0) 三,
2 round(45.926,-1) 四,round(45.926,-2) 五
3 from dual;
一 二 三 四 五
---------- ---------- ---------- ---------- ----------
45.93 45.9 46 50 0
SQL> ed
已写入 file afiedt.buf
1 select trunc(45.926,2) 一,trunc(45.926,1) 二,trunc(45.926,0) 三,
2 trunc(45.926,-1) 四,trunc(45.926,-2) 五
3* from dual
SQL> /
一 二 三 四 五
---------- ---------- ---------- ---------- ----------
45.92 45.9 45 40 0
SQL> --日期函数
SQL> select sysdate from dual;
SYSDATE
--------------
07-12月-13
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2013-12-07 18:24:57
SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss:ff') from dual;
TO_CHAR(SYSTIMESTAMP,'YYYY-MM
-----------------------------
2013-12-07 18:25:57:307000
SQL> --昨天 今天 明天
SQL> select (sysdate-1) 昨天, sysdate 今天,(sysdate+1) 明天 from dual;
昨天 今天 明天
-------------- -------------- --------------
06-12月-13 07-12月-13 08-12月-13
SQL> --计算员工的工龄: 天 星期 月 年
SQL> select ename,hiredate,(sysdate-hiredate) 天,(sysdate-hiredate)/7 星期,
2 (sysdate-hiredate)/30 月,(sysdate-hiredate)/365 年
3 from emp;
SQL> --months_between
SQL> select ename,hiredate,(sysdate-hiredate)/30 一, months_between(sysdate,hiredate) 二
2 from emp;
SQL> --add_months
SQL> select add_months(sysdate,38) from dual;
ADD_MONTHS(SYS
--------------
07-2月 -17
SQL> select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
31-12月-13
SQL> --next_day
SQL> select next_day(sysdate,'星期六') from dual;
NEXT_DAY(SYSDA
--------------
14-12月-13
SQL> select next_day(sysdate,'星期日') from dual;
NEXT_DAY(SYSDA
--------------
08-12月-13
SQL> --应用: 每个星期一自动备份数据
SQL> --参考:27-分布式数据库.avi
SQL> host cls
SQL> select round(sysdate,'month'), round(sysdate,'year') from dual;
ROUND(SYSDATE, ROUND(SYSDATE,
-------------- --------------
01-12月-13 01-1月 -14
SQL> --隐式转换的前提: 被转换对象是可以转换的
SQL> --2013-12-07 18:49:12 今天是星期六
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss"今天是"day') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI
----------------------------------
2013-12-07 18:51:25今天是星期六
SQL> --查询员工的薪水: 两位小数 本地货币代码 千位符
SQL> select to_char(sal,'L9,999.99') from emp;
SQL> --通用函数
SQL> --nvl2(a,b,c) 当a=null, 返回c;否则返回b
SQL> select sal*12+nvl2(comm,comm,0) from emp;
SQL> host cls
SQL> --nullif(a,b) 当a=
SQL> -- b时, 返回null;否则返回a
SQL> select comm,sal,coalesce(comm,sal) from emp;
COMM SAL COALESCE(COMM,SAL)
---------- ----- ------------------
800 800
300 1600 300
500 1250 500
2975 2975
1400 1250 1400
2850 2850
2450 2450
3000 3000
5000 5000
0 1500 0
1100 1100
950 950
3000 3000
1300 1300
已选择14行。
SQL> host cls
SQL> --涨工资,总裁1000 经理800 其他400
SQL> select ename,job,sal 涨前,
2 case job when 'PRESIDENT' then sal+1000
3 when 'MANAGER' then sal+800
4 else sal+400
5 end 涨后
6 from emp;
SQL> select ename,job,sal 涨前,
2 decode(job,'PRESIDENT',sal+1000,
3 'MANAGER',sal+800,
4 sal+400) 涨后
5 from emp;