版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、北京魔樂科技軟件學院 聯(lián)系電話:010-512833461、課程名稱:SQL語句2、知識點2.1、上次課程的主要知識點1、oracle中的四個主要用戶:sys/change_on_install、system/manager、scott/tiger、sh/sh;2、oracle的安裝和卸載操作,如果有時間,可以卸一次;3、sqlplus中的一些主要的操作命令:set linesize、set pagesize、ed、host、查看全部表、desc、conn;2.2、本次預計講解的知識點1、scott用戶下的四張數(shù)據(jù)表的結(jié)構;2、簡單查詢、限定查詢、排序操作;3、Oracle中的單行函數(shù)使用。3
2、、具體內(nèi)容3.1、scott用戶的四張數(shù)據(jù)表(重點,背)在oracle中重點的部分是放在SQL語句上,而要想講解SQL語句之前必須先有數(shù)據(jù)表,主要使用的是scott用戶的四張數(shù)據(jù)表,下面給出這四張數(shù)據(jù)表的表結(jié)構。1、部門表:deptNo.字段名稱類型描述1DEPTNONUMBER(2)部門編號,由兩位數(shù)字所組成2DNAMEVARCHAR2(14)部門名稱,由14位字符所組成3LOCVARCHAR2(13)部門位置2、雇員表:empNo.字段名稱類型描述1EMPNONUMBER(4)雇員編號,由四位數(shù)字所組成2ENAMEVARCHAR2(10)雇員姓名3JOBVARCHAR2(9)職位4MGRN
3、UMBER(4)一個雇員對應的領導編號(雇員編號)5HIREDATEDATE雇員的雇傭日期6SALNUMBER(7,2)基本工資,由兩位小數(shù)和五位整數(shù)所組成7COMMNUMBER(7,2)傭金8DEPTNONUMBER(2)一個雇員所在的部門編號,與dept表的對應3、工資等級表:salgradeNo.字段名稱類型描述1GRADENUMBER工資等級2LOSALNUMBER此等級的最低工資3HISALNUMBER此等級的最高工資4、工資表:bonusNo.字段名稱類型描述1ENAMEVARCHAR2(10)雇員姓名2JOBVARCHAR2(9)職位3SALNUMBER基本工資4COMMNUMB
4、ER傭金以上的四張表結(jié)構,要求記清楚表的作用,每個字段的名稱及類型,以后講解復雜查詢操作時有效。3.2、SQL簡介(理解)SQL(Structured Query Language,結(jié)構查詢語言)是一個功能強大的數(shù)據(jù)庫語言。SQL通常用于與數(shù)據(jù)庫的通訊。ANSI(美國國家標準學會)聲稱,SQL是關系數(shù)據(jù)庫管理系統(tǒng)的標準語言。SQL語句從70年代開發(fā)出來之后,一直在努力推廣數(shù)據(jù)庫的操作標準,而到了80年代的時候世界上有80多種數(shù)據(jù)庫,每種數(shù)據(jù)庫的操作形式都完全不一樣,而在這些數(shù)據(jù)庫之中只有oracle數(shù)據(jù)庫是最早支持SQL語句的數(shù)據(jù)庫。SQL功能強大,概括起來,它可以分成以下幾組: DML(Da
5、ta Manipulation Language,數(shù)據(jù)操作語言):主要進行數(shù)據(jù)的查詢、更新操作; DDL(Data Definition Language,數(shù)據(jù)定義語言):用于定義數(shù)據(jù)庫對象(數(shù)據(jù)表)、用戶; DCL(Data Control Language,數(shù)據(jù)控制語言):控制數(shù)據(jù)庫的操作權限,一般屬于DBA的工作;由于以后的開發(fā)之中,全部都是基于數(shù)據(jù)庫的應用開發(fā),那么SQL語句必須會編寫。3.3、簡單查詢(重點)所謂的簡單查詢指的是查詢一張數(shù)據(jù)表中的全部數(shù)據(jù)記錄,而簡單查詢的語法如下:SELECT DISTINCT * | 列 別名 ,列 別名,.FROM 表名稱 別名 ;范例:查詢數(shù)據(jù)
6、表中的全部記錄,既然要全部記錄,則肯定表示所有的數(shù)據(jù)列都要進行顯示,那么就使用“*”完成。SELECT * FROM emp ;而現(xiàn)在也可以使用投影操作,查詢部分的數(shù)據(jù)列,需要明確的給出數(shù)據(jù)列。范例:查詢每個雇員的編號、姓名、職位,不是全部查詢,那么就不能使用“*”SELECT empno,ename,job FROM emp ;簡單查詢的最大特點實際上就在于將一張表中的全部數(shù)據(jù)行中的數(shù)據(jù)進行顯示。范例:查詢每個雇員的職位,職位是jobSELECT job FROM emp ;此時的確查詢出來了全部的數(shù)據(jù)內(nèi)容,可是卻出現(xiàn)了重復的內(nèi)容,這個時候如果不希望重復數(shù)據(jù)顯示,則使用DISTINCT消除掉
7、顯示的重復行記錄。SELECT DISTINCT job FROM emp ;但是需要說明的是,這個時候所謂的重復記錄,指的是多行記錄里面的所有列的內(nèi)容重復。SELECT DISTINCT ename, job FROM emp ;DISTINCT是指所有列的內(nèi)容全部一樣的時候才可以消除的重復,如果有一列不一樣,則無法消除。而在簡單查詢語句之中,也可以方便的使用各種四則運算。范例:要求計算出每個雇員的基本年薪,同時查詢出雇員的編號、姓名SELECT empno,ename,sal*12 FROM emp ;但是“SAL*12”這個概念太抽象了,看不懂,所以這個時候可以使用一個別名來替代顯示。S
8、ELECT empno,ename,sal*12 income FROM emp ;雖然別名看起來好看些,但是在開發(fā)之中意義不大,而且這個別名上不要加上任何的其他操作,而如果說現(xiàn)在在SELECT子句之中要出現(xiàn)一個固定的數(shù)據(jù)內(nèi)容,則這個內(nèi)容要加上“'”(單引號);SELECT '#',empno,ename,sal*12 income FROM emp ;而且從開發(fā)而言,別名也不要使用中文,就是英文。范例:每個雇員每個月公司會補貼飯食200元,交通補助300元,計算年薪SELECT '#',empno,ename,(sal+200+300)*12 inco
9、me FROM emp ;范例:每個雇員年底可以拿到14個月的工資SELECT '#',empno,ename,(sal+200+300)*12 + sal*2 income FROM emp ;而在簡單查詢語句之中,還有一個“|”的操作符,此符號的功能是連接兩個字符串的內(nèi)容,在數(shù)據(jù)庫之中,所有的字符串都需要使用“'”聲明。范例:連接字符串SELECT DISTINCT 'Hello ' | 'World' FROM emp ;現(xiàn)在要求將所有的雇員信息按照如下方式顯示:“姓名:SMITH(NO.:7369),職位:CLERK,工資:800
10、”。SELECT '姓名:' | ename | '(NO.:' | empno | '),職位:' | job | ',工資:' | sal infoFROM emp ;簡單查詢上所能完成的功能就是將表中的全部數(shù)據(jù)行都顯示出來。3.4、限定查詢(重點)所謂的限定查詢就是指在全部數(shù)據(jù)查詢出來之前增加一些過濾條件,只要滿足此過濾條件的數(shù)據(jù)都可以顯示出來,而過濾條件可以有多個,如果要設置限定則使用WHERE子句完成,此時的SQL語法結(jié)構如下:SELECT DISTINCT * | 列 別名 ,列 別名,.FROM 表名稱 別名WHER
11、E 條件(s) ;可以發(fā)現(xiàn)WHERE子句中的條件可以有多個,而這多個條件的連接有兩種符號完成:· AND:與操作(條件1 AND 條件2 AND ),所有的條件都滿足才可以;· OR:或操作(條件1 OR 條件2 OR ),只要有一個條件滿足即可;除了以上的兩個連接條件之外,在SQL語句之中,限定操作的符號也有許多,下面分類來說明。1、關系運算符關系運算符有如下幾個:>、>=、<、<=、!=(<>)、=;范例:查詢基本工資高于2000的全部雇員信息SELECT * FROM empWHERE sal>2000 ;范例:要求查詢出sm
12、ith的信息SELECT * FROM emp WHERE ename='smith' ;可是,現(xiàn)在不會有任何的結(jié)果返回,因為在oracle之中,所有的數(shù)據(jù)都是區(qū)分大小寫的。SELECT * FROM emp WHERE ename='SMITH' ;范例:查詢出所有不是辦事員的詳細信息SELECT * FROM emp WHERE job<>'CLERK' ;SELECT * FROM emp WHERE job!='CLERK' ;同時需要注意的是,既然查詢的條件不是辦事員,那么也可以對查詢的條件使用NOT進行求反
13、。SELECT * FROM emp WHERE NOT job='CLERK' ;范例:要求查詢出所有銷售人員的基本信息,并且要求銷售人員的工資高于1300現(xiàn)在應該有兩個條件:職位的判斷、工資的判斷,這兩個條件應該同時被滿足,使用ANDSELECT * FROM emp WHERE job='SALESMAN' AND sal>1300 ;范例:查詢出工資范圍在15003000之間的全部雇員信息(包含1500和3000),依然是兩個條件,要同時滿足,ANDSELECT * FROM emp WHERE sal>=1500 AND sal<=3
14、000 ;范例:查詢出所有經(jīng)理或者是銷售人員的信息,并且要求這些人的基本工資高于1500· 條件一:職位是經(jīng)理或者是銷售,那么就意味著使用OR操作;· 條件二:工資高于1500,則使用AND連接;SELECT * FROM emp WHERE (job='MANAGER' OR job='SALESMAN') AND sal>1500 ;可是一定需要注意的是,在設置判斷內(nèi)容時,所有的字符串要使用單引號聲明,而數(shù)字不需要任何修飾。2、范圍運算符:BEWTEENAND“BETWEEN 最小值 AND 最大值”,表示在一個指定的范圍之中進行內(nèi)
15、容的過濾,其中過濾時會包含最小值和最大值,例如,現(xiàn)在查詢工資范圍在15003000之間的雇員信息,在之前使用AND操作符完成,而現(xiàn)在就通過BETWEENAND符號完成。SELECT * FROM emp WHERE sal BETWEEN 1500 AND 3000 ;但是需要聲明的是,范圍運算符不一定只能針對于數(shù)字范圍來決定,日期也同樣可以操作。范例:要求查詢出所有在1981年雇傭的雇員信息,1981-01-01('01-1月 -81') 1981-12-31('31-12月 -1981');SELECT * FROM emp WHERE hiredate B
16、ETWEEN '01-1月 -81' AND '31-12月 -1981' ;一定要記住的是,在SQL語句里面,幾乎所有的操作符號都不受數(shù)據(jù)類型的限制。SELECT * FROM emp WHERE ename BETWEEN 'A' AND 'Z' ;3、null判斷:IS NULL、IS NOT NULLNULL從數(shù)據(jù)庫概念上講表示的是一種不確定的數(shù)據(jù)內(nèi)容,是因為暫時不知道里面的內(nèi)容是多少,如果在數(shù)字操作上設置了NULL,可不是0。范例:查詢所有領取傭金的雇員信息 comm不為空SELECT * FROM emp WHERE
17、comm IS NOT NULL ;SELECT * FROM emp WHERE NOT comm IS NULL ;范例:查詢所有不領取傭金的雇員SELECT * FROM emp WHERE comm IS NULL ;范例:查詢所有領取傭金高于100的雇員信息SELECT * FROM emp WHERE comm>100 ;4、IN操作符:IN、NOT IN所謂的IN操作指的是一個指定范圍的查詢,例如,現(xiàn)在有這樣一個要求。范例:查詢出雇員編號是7369、7566、9999的雇員信息SELECT * FROM emp WHERE empno=7369 OR empno=7566
18、OR empno=9999 ;而同樣的操作,現(xiàn)在是相當于指定了范圍,就使用IN操作完成。SELECT * FROM emp WHERE empno IN (7369,7566,9999) ;現(xiàn)在也同樣可以使用NOT IN設置為不再指定的范圍之中。SELECT * FROM emp WHERE empno NOT IN (7369,7566,9999) ;注意:在使用NOT IN時要注意NULL的問題例如,現(xiàn)在使用IN操作符:SELECT * FROM emp WHERE empno IN (7369,7566,NULL) ;在IN操作之中,范圍里面設置NULL并沒有任何的問題,但是反過來,換成
19、NOT IN操作。SELECT * FROM emp WHERE empno NOT IN (7369,7566,NULL) ;在使用NOT IN操作之中,范圍里面不允許有null,否則不會有任何的查詢結(jié)果返回。5、模糊查詢:LIKE此判斷符號在一般的項目之中出現(xiàn)較多,例如,像一些網(wǎng)站上會存在關鍵字查詢,實際上這種查詢都是依靠了LIKE子句完成,而搜索引擎上所使用的關鍵字查詢不是這種操作。LIKE子句如果要使用,則首先需要兩個匹配符號:· “%”:表示匹配任意多個(0個、1個、多個);· “_”:表示只匹配任意一個;范例:要求查詢出所有雇員姓名是以A開頭的全部雇員信息SEL
20、ECT * FROM emp WHERE ename LIKE 'A%' ;范例:要求查詢出雇員姓名第二個字母是M的全部雇員信息SELECT * FROM emp WHERE ename LIKE '_M%' ;范例:要求查詢出雇員姓名任意位置上包含字母A的全部雇員信息SELECT * FROM emp WHERE ename LIKE '%A%' ;如果要求反,直接使用NOT即可。SELECT * FROM emp WHERE ename NOT LIKE '%A%' ;注意點:關于LIKE子句使用· 注意點一:使用L
21、IKE子句的時候不受任何的數(shù)據(jù)類型限制;SELECT * FROM emp WHERE ename LIKE '%1%' OR sal LIKE '%1%' OR hiredate LIKE '%1%' ;· 注意點二:如果在設置模糊查詢時,沒有設置任何的查詢關鍵字,則表示查詢?nèi)?;SELECT * FROM emp WHERE ename LIKE '%' ;這一特性在以后編寫程序上會使用很多。3.5、數(shù)據(jù)排序(重點)當所有的數(shù)據(jù)查詢出來之后,希望其可以按照指定的字段內(nèi)容進行排列的話,則使用ORDER BY子句完成,此
22、時的SQL語句格式如下:SELECT DISTINCT * | 列 別名 ,列 別名,.FROM 表名稱 別名WHERE 條件(s) ORDER BY 字段 ASC | DESC ,字段 ASC | DESC,. ;在設置排序的時候有兩種排序方式:· ASC(默認):所有的數(shù)據(jù)按照指定的字段升序排列;· DESC:所有的數(shù)據(jù)按照指定的字段降序排列;范例:查詢出所有雇員的信息,要求按照工資排序SELECT * FROM emp ORDER BY sal ;SELECT * FROM emp ORDER BY sal ASC ;范例:要求查詢所有雇員的信息,按照雇傭日期由早到晚
23、排序SELECT * FROM emp ORDER BY hiredate ASC ;ORDER BY子句也同樣不分數(shù)據(jù)類型,只要有數(shù)據(jù)即可,而常用的數(shù)據(jù)類型就三種:數(shù)字、字符、日期;范例:查詢?nèi)抗蛦T信息,按照工資由高到低排序,如果工資相同,則按照雇傭日期由早到晚排序SELECT * FROM emp ORDER BY sal DESC,hiredate ASC ;可以發(fā)現(xiàn)在ORDER BY子句之中如果編寫多個排序字段,則表示按照順序依次比較,同時需要注意的是,在查詢語句之中,ORDER BY子句必須放在最后一行;3.6、思考題(重點)1、選擇部門30中的所有員工。SELECT * FROM
24、 emp WHERE deptno=30 ;2、列出所有辦事員(CLERK)的姓名,編號和部門編號。SELECT empno,ename,deptno FROM emp WHERE job='CLERK' ;3、找出傭金高于薪金的員工。SELECT * FROM emp WHERE comm>sal ;4、找出傭金高于薪金的60%的員工。SELECT * FROM emp WHERE comm>sal*0.6 ;5、找出部門10中所有經(jīng)理(MANAGER)和部門20中所有辦事員(CLERK)的詳細資料。SELECT * FROM empWHERE (deptno=1
25、0 AND job='MANAGER') OR (deptno=20 AND job='CLERK') ;6、找出部門10中所有經(jīng)理(MANAGER),部門20中所有辦事員(CLERK),既不是經(jīng)理又不是辦事員但其薪金大于或等于2000的所有員工的詳細資料。SELECT * FROM empWHERE (deptno=10 AND job='MANAGER') OR (deptno=20 AND job='CLERK')OR (job NOT IN ('MANAGER','CLERK') AND s
26、al>=2000) ;7、找出收取傭金的員工的不同工作。SELECT DISTINCT job FROM emp WHERE comm IS NOT NULL ;8、找出不收取傭金或收取的傭金低于100的員工。SELECT * FROM emp WHERE comm IS NULL OR comm<100 ;9、顯示不帶有“R”的員工的姓名。SELECT * FROM emp WHERE ename NOT LIKE '%R%' ;10、顯示姓名字段的任何位置包含“A”的所有員工的姓名,顯示的結(jié)果按照雇傭年限由早到晚排序,如果雇傭日期相同,則按照基本工資由高到低排序
27、,如果基本工資相同,則按照職位排序。SELECT *FROM emp WHERE ename LIKE '%A%'ORDER BY hiredate ASC,sal DESC,job ;今天重點的內(nèi)容就是四個子句:SELECT、FROM、WHERE、ORDER BY。3.7、單行函數(shù)(重點)所謂的單行函數(shù)指的就是完成某一個子功能的小的操作函數(shù),例如,可以將字符串進行大小寫轉(zhuǎn)換等等,對于一個數(shù)據(jù)庫而言,除了SQL語句之外,那么剩下要掌握的就是這些單行函數(shù),但是需要說明的是,單行函數(shù)是數(shù)據(jù)庫自己的功能,而且有些功能也是可以通過程序來進行處理的,單行函數(shù)一共分為五種:字符串函數(shù)、數(shù)字
28、函數(shù)、日期函數(shù)、轉(zhuǎn)換函數(shù)、通用函數(shù)。3.7.1、字符函數(shù)字符函數(shù)的主要功能是對字符串的數(shù)據(jù)進行處理,一般字符函數(shù)包含:UPPER()、LOWER()、INITCAP()、LENGTH()、SUBSTR()、REPLACE()、INSTR();1、大、小寫轉(zhuǎn)換函數(shù):UPPER()、LOWER()函數(shù)格式如下:字符串 UPPER(列 | 字符串數(shù)據(jù))、字符串 LOWER(列 | 字符串數(shù)據(jù))范例:來驗證一下UPPER()、LOWER()函數(shù)SELECT UPPER('Hello'),LOWER('Hello') FROM dual ;為了方便用戶驗證一些操作,所以專
29、門提供了一個“DUAL”的虛擬表;范例:要求由用戶輸入一個雇員的姓名,并且根據(jù)用戶的輸入內(nèi)容查詢出此雇員的全部信息,在進行輸入的時候,用戶是99%不會考慮大小寫的問題,那么程序就必須智能一些,幫助用戶自動解決大小寫的問題,而此時就可以使用UPPER()函數(shù)完成功能。SELECT * FROM emp WHERE ename=UPPER('&inputEname') ;在以后的程序開發(fā)之中,如果某些操作不需要區(qū)分大小寫的話,那么就都按大寫操作,使用UPPER()函數(shù)。2、開頭首字母大寫函數(shù):INITCAP()SELECT ename,INITCAP(ename) FROM
30、 emp ;3、替換函數(shù):字符串 REPLACE(列 | 字符串,要替換的內(nèi)容,新的內(nèi)容)范例:將雇員姓名之中,所有的字母A都替換為“_”SELECT ename,REPLACE(ename,'A','_') FROM emp ;SELECT ename,REPLACE(ename,UPPER('a'),'_') FROM emp ;4、求出字符串的長度:數(shù)字 LENGTH(列 | 字符串)范例:查詢出雇員姓名之中,長度正好是5個的全部雇員信息SELECT * FROM emp WHERE LENGTH(ename)=5 ;5、查
31、找字符串的位置:數(shù)字 INSTR(列 | 字符串,要查找的字符串,開始位置)范例:查找一個字符串之中,是否包含字母lSELECT INSTR('Hello World','l') FROM dual ;默認情況下從1開始,那么是否可以改變呢?SELECT INSTR('Hello World','l',6) FROM dual ;6、字符串截?。鹤址?SUBSTR(列 | 字符串,開始點,截取長度)如果沒有指定截取的長度,則表示從開始點一直截取到結(jié)尾。SELECT SUBSTR('Hello World',7),
32、SUBSTR('Hello World',0,6) FROM dual ;此時字符串的下標是從0開始的,但是Oracle很智能,從1開始和從0開始是一樣的。SELECT SUBSTR('Hello World',7),SUBSTR('Hello World',1,6) FROM dual ;范例:要求截取每一個雇員姓名的前三個字符SELECT ename,SUBSTR(ename,0,3) FROM emp ;范例:要求截取每一個雇員姓名的后三個字符· 基本思路:由于每一個雇員姓名的長度不一樣,所以要想截取后三個,那么必須確定出截取的開
33、始點,而這個開始點就必須有字符串的長度。SELECT ename,SUBSTR(ename,0,3),SUBSTR(ename,LENGTH(ename)-2) FROM emp ;· 先進思路:SUBSTR()函數(shù)可以設置負數(shù),表示從后截取。SELECT ename,SUBSTR(ename,0,3),SUBSTR(ename,-3) FROM emp ;面試題:問oracle中的SUBSTR()函數(shù)截取時下標是從0還是從1開始?· 從0或者是1開始結(jié)果都是一樣的,如果需要也可以設置為負數(shù),表示從后開始截??;3.7.2、數(shù)字函數(shù)數(shù)字函數(shù)主要有三個:ROUND()、TRUN
34、C()、MOD();1、四舍五入操作:數(shù)字 ROUND(列 | 數(shù)字,保留的小數(shù)位數(shù))SELECT ROUND(15.5),ROUND(-15.5),ROUND(-15.55),ROUND(18723.6542,2),ROUND(18723.6542,-2) FROM dual ;如果在操作之中沒有給出小數(shù)的保留位數(shù),則表示小數(shù)點之后的內(nèi)容直接進行四舍五入。2、截取小數(shù)位:數(shù)字 TRUNC(列 | 數(shù)字,保留小數(shù)位)SELECT TRUNC(15.5),TRUNC(-15.5),TRUNC(-15.55),TRUNC(18723.6589,2),TRUNC(18767.6542,-2) FRO
35、M dual ;3、取模操作(余數(shù)計算):數(shù)字 MOD(列 | 數(shù)字1,列 | 數(shù)字2)SELECT MOD(10,3) FROM dual ;三個數(shù)學函數(shù)本身不難理解,但是在這里面需要注意的是ROUND()函數(shù),以后只要是看見ROUND這個單詞就表示四舍五入操作。3.7.3、日期函數(shù)(難點)在講解日期函數(shù)操作之前,首先需要解決一個問題,必須知道當前的日期(當前系統(tǒng)的日期時間),而為了解決這一問題在Oracle中提供了一個SYSDATE的數(shù)據(jù)列,方便用戶操作。范例:取得當前的系統(tǒng)日期時間SELECT SYSDATE FROM dual ;取得了當前日期時間之后,在日期操作之中還包含三個數(shù)學公式
36、:· 日期 + 數(shù)字 = 日期(若干天之后的日期);· 日期 數(shù)字 = 日期(若干天之前的日期);· 日期 日期 = 數(shù)字(兩個日期之間的差);范例:求出10天之前和20天之后的日期SELECT SYSDATE-10,SYSDATE+20 FROM dual ;范例:求出每個雇員到今天為止雇傭的天數(shù),日期 日期SELECT ename,hiredate,SYSDATE-hiredate FROM emp ;而取得了當前日期之后,在Oracle中也提供了四個日期的操作函數(shù):· 求出若干月之后的日期:日期 ADD_MONTHS(列 | 日期,要增長的月份);
37、· 求出兩個日期之間經(jīng)歷的月數(shù):數(shù)字 MONTHS_BETWEEN(列 | 日期,列 | 日期);· 求出一個指定日期所在月的最后一天:日期 LAST_DATE(列 | 日期);· 求出下一個指定的日子(星期X):日期 NEXT_DAY(列 | 日期);范例:計算四個月之后的日期SELECT ADD_MONTHS(SYSDATE,4) FROM dual ;范例:計算每一個雇員到今天為止的雇傭月份SELECT empno,ename,MONTHS_BETWEEN(SYSDATE,hiredate),MONTHS_BETWEEN(SYSDATE,hiredate)/
38、12 FROM emp ;之所以要使用這些日期函數(shù),其最大的方便在于可以很好的避免閏年的問題。范例:求出本月的最后一天SELECT LAST_DAY(SYSDATE) FROM dual ;范例:求出每一個雇員雇傭日期所在月的最后一天SELECT LAST_DAY(hiredate) FROM emp ;范例:計算出下一個星期一的日期SELECT NEXT_DAY(SYSDATE,'星期一') FROM dual ;SELECT NEXT_DAY(SYSDATE,'星期二') FROM dual ;以上的函數(shù)只要是有日期型數(shù)據(jù)在,就可以操作,并不去關心這些日期是
39、從那里來的。日期函數(shù)的基本功能很好理解,但是麻煩就麻煩在這些日期函數(shù)有可能會和數(shù)字一起混合使用的時候。3.7.4、轉(zhuǎn)換函數(shù)(核心)到現(xiàn)在已經(jīng)接觸了三種數(shù)據(jù)類型:數(shù)字、字符串、日期,而所謂的轉(zhuǎn)換函數(shù)就是指可以通過函數(shù)實現(xiàn)這些數(shù)據(jù)類型之間的互相轉(zhuǎn)換操作。· 數(shù)字或日期轉(zhuǎn)字符串:字符串 TO_CHAR(列 | 數(shù)字 | 日期,轉(zhuǎn)換格式);· 字符串轉(zhuǎn)日期:日期 TO_DATE(列 | 字符串,轉(zhuǎn)換格式);· 字符串轉(zhuǎn)數(shù)字:數(shù)字 TO_NUMBER(列 | 字符串);1、TO_CHAR()函數(shù)TO_CHAR()函數(shù)的主要功能是可以將數(shù)字或日期數(shù)據(jù)進行格式化顯示,例如,默認
40、情況下一個日期的顯示格式:“17-12月-80”,這個看起來很不舒服,所以希望可以將其轉(zhuǎn)換一種格式,但是格式雖然轉(zhuǎn)換了,里面的內(nèi)容并沒有任何的改變,所以就需要一些格式化的標記:年(yyyy)、月(mm)、日(dd);SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd') FROM dual ;但是這里面發(fā)現(xiàn)只有日期,而在Oracle之中,Date數(shù)據(jù)類型里面除了日期之外還包含了時間。SELECT TO_CHAR(SYSDATE,'fmyyyy-mm-dd hh24:mi:ss') FROM dual ;TO_DATE()函數(shù)還有一個最大的功能在
41、于可以進行日期的拆分SELECT TO_CHAR(SYSDATE,'yyyy') year,TO_CHAR(SYSDATE,'mm') months,TO_CHAR(SYSDATE,'dd') day FROM dual ;在TO_CHAR()之中“fm”標記的功能主要是進行去掉前導“0”,不過建議保留,以上完成的是對日期型數(shù)據(jù)的轉(zhuǎn)換,下面同樣完成對數(shù)字型的格式化,為了方便數(shù)字格式化,TO_CHAR()也可以按照指定的格式完成,但是在這里面同樣需要標記,只是這個標記使用“9”表示,每一個9表示的不是數(shù)字的含義,而是一位數(shù)字的標記。SELECT T
42、O_CHAR(23809234890,'999,999,999,999,999,999') FROM dual ;但是需要記住的是,不管是日期還是數(shù)字,格式化完成之后最終都是字符串數(shù)據(jù)。2、TO_DATE()函數(shù)TO_DATE()函數(shù)是將一個指定的字符串變回為DATE型數(shù)據(jù)。SELECT TO_DATE('1898-09-18','yyyy-mm-dd') FROM dual ;此操作在以后講解數(shù)據(jù)更新的時候會部分使用到,在程序之中用處不大。3、TO_NUMBER()函數(shù)功能是將字符串變?yōu)閿?shù)字進行操作。SELECT TO_NUMBER('1') + TO_NUMBER('2') FROM dual ;SELECT '1' + '2' FROM dual ;TO_NUMBER()這個函數(shù)的意義基本上已經(jīng)不在了,知道就行了,重點還是在TO_CHAR()、TO_DAT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度門店合伙人激勵機制服務合同4篇
- 2025年度二零二五農(nóng)行個人二手房交易貸款合同2篇
- 2025年度綠色建筑節(jié)能改造工程合同(二零二五版)4篇
- 二零二五年度商業(yè)門面租賃合同范本-@-1
- 2025年度綠色生態(tài)餐廳檔口租賃合同樣本4篇
- 2025年度城市軌道交通鋼管材料供應與承包合同協(xié)議書范本
- 2025版南海區(qū)創(chuàng)新創(chuàng)業(yè)人才居住就業(yè)支持合同4篇
- 2025版門面租賃合同消防安全及責任承擔4篇
- 二零二五年度外賣送餐服務合同書(含增值服務)
- 二零二五年度年薪制工資與員工晉升合同模板
- 衛(wèi)生服務個人基本信息表
- 醫(yī)學脂質(zhì)的構成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實踐路徑
- 廣東省湛江市廉江市2023-2024學年八年級上學期期末考試數(shù)學試卷(含答案)
- 2024年湖北省知名中小學教聯(lián)體聯(lián)盟中考語文一模試卷
- 安徽省蕪湖市2023-2024學年高一上學期期末考試 生物 含解析
- 交叉口同向可變車道動態(tài)控制與信號配時優(yōu)化研究
- 燃氣行業(yè)有限空間作業(yè)安全管理制度
- 數(shù)列練習題(含答案)基礎知識點
- 人教版(2024新版)七年級上冊英語期中+期末學業(yè)質(zhì)量測試卷 2套(含答案)
- 通用電子嘉賓禮薄
評論
0/150
提交評論