查詢(xún)
select *from emp where ename=UPPER('&inputname');
輸入 inputname 的值: smith
原值 1: select *from emp where ename=UPPER('&inputname')
新值 1: select *from emp where ename=UPPER('smith')
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
字符串函數(shù)
字符串 UPPER(列|字符串) 將所有字符串變?yōu)榇髮?xiě)
字符串 LOWER(列|字符串) 將所有字符串變?yōu)榇髮?xiě)
字符串 INITCAP(列|字符串) 開(kāi)頭字母大寫(xiě),其余全部小寫(xiě)
數(shù)字 LENGTH(列|字符串) 取得字符串長(zhǎng)度
字符串 SUBSTR(列|字符串,開(kāi)始索引,[長(zhǎng)度]) 截取字符串,若沒(méi)有設(shè)置長(zhǎng)度,則從開(kāi)始截取到結(jié)尾
字符串 REPLACE(列|字符串,舊內(nèi)容,新內(nèi)容) 新內(nèi)容替換舊內(nèi)容
UPPER
select upper('hello') from dual; //專(zhuān)供查詢(xún)的dual為虛表
UPPER('HEL
----------
HELLO
LOWER
select lower (ename) from emp;
LOWER(ENAME)
--------------------
smith
allen
ward
jones
martin
blake
clark
scott
king
turner
adams
james
ford
miller
已選擇14行。
INITCAP
select ename,initcap(ename) from emp;
ENAME INITCAP(ENAME)
-------------------- --------------------
SMITH Smith
ALLEN Allen
WARD Ward
JONES Jones
MARTIN Martin
BLAKE Blake
CLARK Clark
SCOTT Scott
KING King
TURNER Turner
ADAMS Adams
JAMES James
FORD Ford
MILLER Miller
已選擇14行。
LENGTH
select length('djdjjdjdjskskks') from dual;
LENGTH('DJDJJDJDJSKSKKS')
-------------------------
15
-------------查詢(xún)姓名長(zhǎng)度為5的雇員信息-------------
select *from emp where length(ename)=5;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7566 JONES MANAGER 7839 02-4月 -81 2975 20
7698 BLAKE MANAGER 7839 01-5月 -81 2850 30
7782 CLARK MANAGER 7839 09-6月 -81 2450 10
7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
7876 ADAMS CLERK 7788 23-5月 -87 1100 20
7900 JAMES CLERK 7698 03-12月-81 950 30
已選擇8行。
SUBSTR(Oracle默認(rèn)從1開(kāi)始而不是0)
select substr('helloworld',6) from dual;
SUBSTR('HE
----------
world
---------------------------------------------------------
select substr('helloworld',1,5) from dual;
SUBSTR('HE
----------
hello
---------------------------------------------------------
select ename,substr(ename,1,3) from emp;
ENAME SUBSTR(ENAME,1,3)
-------------------- ------------------------
SMITH SMI
ALLEN ALL
WARD WAR
JONES JON
MARTIN MAR
BLAKE BLA
CLARK CLA
SCOTT SCO
KING KIN
TURNER TUR
ADAMS ADA
JAMES JAM
FORD FOR
MILLER MIL
--------------------從后面截取--------------
select ename,substr(ename,length(ename)-2) from emp;
select ename,substr(ename,-3) from emp;
ENAME SUBSTR(ENAME,LENGTH(ENAME)-2)
-------------------- --------------------------------------------------------------------------------
SMITH ITH
ALLEN LEN
WARD ARD
JONES NES
MARTIN TIN
BLAKE AKE
CLARK ARK
SCOTT OTT
KING ING
TURNER NER
ADAMS AMS
JAMES MES
FORD ORD
MILLER LER
數(shù)值函數(shù)
數(shù)字 ROUND (列 | 數(shù)字 [,小數(shù)位]) 實(shí)現(xiàn)數(shù)據(jù)的四舍五入,可以設(shè)置保留小數(shù)位
----------------------------------------------------------------------------------------
數(shù)字 TRUNC (列 | 數(shù)字 [,小數(shù)位]) 實(shí)現(xiàn)數(shù)據(jù)的截取,即不進(jìn)位
----------------------------------------------------------------------------------------
數(shù)字 MOD(列 | 數(shù)字 ,列 | 數(shù)字) 求模(計(jì)算余數(shù))
ROUND(會(huì)進(jìn)位)
select round(789.36544555) from dual;
ROUND(789.36544555)
-------------------
789
---------------------------------------------------------
select round(256.55555555,2) from dual;
ROUND(256.55555555,2)
---------------------
256.56
TRUNC(不會(huì)進(jìn)位)
select trunc(225.658255,2) from dual;
TRUNC(225.658255,2)
-------------------
225.65
---------------------------------------------------------
select trunc(225.658255) from dual;
TRUNC(225.658255)
-----------------
225
MOD
select mod(10,3) from dual;
MOD(10,3)
----------
1
日期函數(shù)
偽列: SYSDATE SYSTIMESTAMP
模糊日期操作公式:
日期+數(shù)字=日期(若干天之后的日期)
日期-數(shù)字=日期(若干天之前的日期)
日期-日期=數(shù)字(天數(shù))
select sysdate from dual;
SYSDATE
--------------
04-4月 -17
select systimestamp from dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
04-4月 -17 09.34.09.223000 上午 +08:00
日期操作(7天前,120天之后)
select sysdate-7,sysdate+120 from dual;
SYSDATE-7 SYSDATE+120
-------------- --------------
28-3月 -17 02-8月 -17
查詢(xún)?nèi)肼毴掌?/p>
select empno,ename,sal,job,sysdate-hiredate from emp;
EMPNO ENAME SAL JOB SYSDATE-HIREDATE
---------- -------------------- ---------- ------------------ ----------------
7369 SMITH 800 CLERK 13257.4062
7499 ALLEN 1600 SALESMAN 13192.4062
7521 WARD 1250 SALESMAN 13190.4062
7566 JONES 2975 MANAGER 13151.4062
7654 MARTIN 1250 SALESMAN 12972.4062
7698 BLAKE 2850 MANAGER 13122.4062
7782 CLARK 2450 MANAGER 13083.4062
7788 SCOTT 3000 ANALYST 10943.4062
7839 KING 5000 PRESIDENT 12922.4062
7844 TURNER 1500 SALESMAN 12992.4062
7876 ADAMS 1100 CLERK 10909.4062
7900 JAMES 950 CLERK 12906.4062
7902 FORD 3000 ANALYST 12906.4062
7934 MILLER 1300 CLERK 12855.4062
準(zhǔn)確計(jì)算公式
日期 AND_MONTHS(列 | 日期,月數(shù)) 在指定日期上增加若干月之后的日期
數(shù)字 MONTHS_BETWEEN(列|日期,列|日期) 返回兩個(gè)日期之間所經(jīng)歷的月數(shù)
日期 LAST_DAY(列|日期) 取得所在日期月的最后一天
日期 NEXT_DAY(列|日期,星期X) 返回下一個(gè)指定的一周時(shí)間數(shù)對(duì)應(yīng)的日期
4個(gè)月之后
select add_months(sysdate,4) from dual;
ADD_MONTHS(SYS
--------------
04-8月 -17
----------------------------------------------------
select add_months(sysdate,4),add_months(sysdate,20) from dual;
ADD_MONTHS(SYS ADD_MONTHS(SYS
-------------- --------------
04-8月 -17 04-12月-18
MONTHS_BETWEEN
select empno,ename,hiredate,months_between(sysdate,hiredate) from emp;
EMPNO ENAME HIREDATE MONTHS_BETWEEN(SYSDATE,HIREDATE)
---------- -------------------- -------------- --------------------------------
7369 SMITH 17-12月-80 435.59685
7499 ALLEN 20-2月 -81 433.500076
7521 WARD 22-2月 -81 433.43556
7566 JONES 02-4月 -81 432.080721
7654 MARTIN 28-9月 -81 426.242012
7698 BLAKE 01-5月 -81 431.112979
7782 CLARK 09-6月 -81 429.854915
7788 SCOTT 19-4月 -87 359.532334
7839 KING 17-11月-81 424.59685
7844 TURNER 08-9月 -81 426.887173
7876 ADAMS 23-5月 -87 358.403302
7900 JAMES 03-12月-81 424.048463
7902 FORD 03-12月-81 424.048463
7934 MILLER 23-1月 -82 422.403302
LAST_DAY
//查詢(xún)當(dāng)前月的最后一天
select last_day(sysdate) from dual;
LAST_DAY(SYSDA
--------------
30-4月 -17
-------------------------------------------------------
//查詢(xún)所有在雇傭所在月倒數(shù)前三天的雇員信息 where 篩選作用
select empno,ename,hiredate,last_day(hiredate)-2 from emp where hiredate=last_day(hiredate)-2;
EMPNO ENAME HIREDATE LAST_DAY(HIRED
---------- -------------------- -------------- --------------
7654 MARTIN 28-9月 -81 28-9月 -81
NEXT_DAY(返回當(dāng)前日期下周X所對(duì)應(yīng)的日期)
select next_day(sysdate,'星期二') from dual;
NEXT_DAY(SYSDA
--------------
11-4月 -17
以年月日的形式計(jì)算出每個(gè)雇員到現(xiàn)在的雇傭時(shí)間

日期圖
select empno,ename,hiredate,
2 trunc(months_between(sysdate,hiredate)/12) years,
3 trunc(mod(months_between(sysdate,hiredate),12)) months,
4 trunc(sysdate-add_months(hiredate,months_between(sysdate,hiredate))) days
5 from emp;
EMPNO ENAME HIREDATE YEARS MONTHS DAYS
---------- -------------------- -------------- ---------- ---------- ----------
7369 SMITH 17-12月-80 36 3 18
7499 ALLEN 20-2月 -81 36 1 15
7521 WARD 22-2月 -81 36 1 13
7566 JONES 02-4月 -81 36 0 2
7654 MARTIN 28-9月 -81 35 6 7
7698 BLAKE 01-5月 -81 35 11 3
7782 CLARK 09-6月 -81 35 9 26
7788 SCOTT 19-4月 -87 29 11 16
7839 KING 17-11月-81 35 4 18
7844 TURNER 08-9月 -81 35 6 27
7876 ADAMS 23-5月 -87 29 10 12
7900 JAMES 03-12月-81 35 4 1
7902 FORD 03-12月-81 35 4 1
7934 MILLER 23-1月 -82 35 2 12
轉(zhuǎn)換函數(shù)
字符串 TO_CHAR(列|日期|數(shù)字,轉(zhuǎn)換格式) 將日期或數(shù)字轉(zhuǎn)換成指定結(jié)構(gòu)的字符串
日期 TO_DATE(列|字符串,轉(zhuǎn)換格式) 按照指定的轉(zhuǎn)換格式編寫(xiě)字符串后將其變?yōu)槿掌谛蛿?shù)據(jù)
數(shù)字 TO_NUMBER(列|字符串) 將字符串變?yōu)閿?shù)字
一、TO_CHAR
轉(zhuǎn)換格式
日期:年(yyyy)、月(mm)、日(dd);
時(shí)間:時(shí)(hh、hh24)、分(mi)、秒(ss);
數(shù)字:任意數(shù)字(9)、本地貨幣符號(hào)(L)。
轉(zhuǎn)換當(dāng)前日期
SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;
TO_CHAR(SYSDATE,'YYY
--------------------
2017-04-08
------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH:MI:SS')
--------------------------------------
2017-04-08 03:36:17
-------------------------------------------------
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY-MM-DDHH24:MI:SS'
--------------------------------------
2017-04-08 15:37:28
日期數(shù)據(jù)的拆分
SQL> select to_char(sysdate,'yyyy'),to_char(sysdate,'mm'),to_char(sysdate,'dd') from dual;
TO_CHAR( TO_C TO_C
-------- ---- ----
2017 04 08
查詢(xún)?cè)诙路莨蛡虻膯T工
SQL> select *from emp where to_char(hiredate,'mm')='02';
select *from emp where to_char(hiredate,'mm')=2;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- -------------------- ------------------ ---------- -------------- ---------- ---------- ----------
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30
7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30
格式化數(shù)字
SQL> select to_char(9999999999,'L999,999,999,999,999') from dual;
TO_CHAR(9999999999,'L999,999,999,999,999')
------------------------------------------------------------
¥9,999,999,999
二、TO_DATE
將字符串轉(zhuǎn)為日期
SQL> select to_date('2016-05-15','yyyy-mm-dd') from dual;
TO_DATE('2016-
--------------
15-5月 -16
三、TO_NUMBER
//提供默認(rèn)轉(zhuǎn)換 select '1'+'2' from dual;與下面一致
SQL> select to_number('1')+to_number('2') from dual;
TO_NUMBER('1')+TO_NUMBER('2')
-----------------------------
3
通用函數(shù)
數(shù)字 NVL(列|NULL,默認(rèn)值) 如果傳入的內(nèi)容是NULL,則使用默認(rèn)數(shù)值處理;如果不是NULL則使用原始數(shù)據(jù)處理;
數(shù)據(jù)類(lèi)型 DECODE(列|字符串|數(shù)值,比較內(nèi)容1,顯示內(nèi)容1,比較內(nèi)容2,顯示內(nèi)容2,...[,默認(rèn)顯示內(nèi)容]) 設(shè)置的內(nèi)容會(huì)與每一個(gè)比較內(nèi)容進(jìn)行比較,如果內(nèi)容相同,則會(huì)使用顯示內(nèi)容進(jìn)行輸出,如何都不相同,則使用最后的默認(rèn)信息輸出。
一、 NVL 處理NULL函數(shù)(任何數(shù)與NULL運(yùn)算都為NULL此時(shí)把NULL替換成0,所以要處理NULL值)
SQL> select empno,ename,comm,(sal+nvl(comm,0))*12 from emp;
EMPNO ENAME COMM (SAL+NVL(COMM,0))*12
---------- -------------------- ---------- --------------------
7369 SMITH 9600
7499 ALLEN 300 22800
7521 WARD 500 21000
7566 JONES 35700
7654 MARTIN 1400 31800
7698 BLAKE 34200
7782 CLARK 29400
7788 SCOTT 36000
7839 KING 60000
7844 TURNER 0 18000
7876 ADAMS 13200
7900 JAMES 11400
7902 FORD 36000
7934 MILLER 15600
二、DECODE(比較輸出)
將職位信息換成中文(要設(shè)置則全部設(shè)置,不設(shè)置的為NULL,若不設(shè)置也可用‘---’表示)
SQL> select ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷(xiāo)售') from emp;
ENAME JOB DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH CLERK 辦事員
ALLEN SALESMAN 銷(xiāo)售
WARD SALESMAN 銷(xiāo)售
JONES MANAGER
MARTIN SALESMAN 銷(xiāo)售
BLAKE MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
TURNER SALESMAN 銷(xiāo)售
ADAMS CLERK 辦事員
JAMES CLERK 辦事員
FORD ANALYST
MILLER CLERK 辦事員
-----------------------------------------------------
SQL> select ename,job,decode(job,'CLERK','辦事員','SALESMAN','銷(xiāo)售','---') from emp;
ENAME JOB DECODE(JOB,'CLERK'
-------------------- ------------------ ------------------
SMITH CLERK 辦事員
ALLEN SALESMAN 銷(xiāo)售
WARD SALESMAN 銷(xiāo)售
JONES MANAGER ---
MARTIN SALESMAN 銷(xiāo)售
BLAKE MANAGER ---
CLARK MANAGER ---
SCOTT ANALYST ---
KING PRESIDENT ---
TURNER SALESMAN 銷(xiāo)售
ADAMS CLERK 辦事員
JAMES CLERK 辦事員
FORD ANALYST ---
MILLER CLERK 辦事員