oracle中prad函数_024 SQL函数
1. 使用ORDER BY排序
(1) ORDER BY 子句的作用是什么?
用ORDER BY子句排序。
用于對結果集進行排序處理,提供了升序排序(ASC)與降序排序(DESC)如果不指定排序規則默認為升序排序。在排序中也可以使用沒有包括在SELECT子句中的列排序。如果未使用ORDER BY子句,排序次序就未定義,并且Oracle服務器可能對于相同查詢的兩次執行回行的順序不同。
ORDER BY子句在SELECT語句的最后。
(2) 如何指定升序排序?
ACS:升序排序,默認
(3) 如何指定降序排序?
DESC:降序排序
(4) 升序的規則是什么?
對于數字值,小的值在前面顯示--例如,1-999.
對于日期,早的日期在前面顯示--例如,01-1-92在01-1-95前面。
對于字符值,依字母順序顯示--例如,A第一,Z最后。
對于空值,升序排序時顯示在最后,降序排序時顯示在最前面。
查詢時起別名要用雙引號“Employee”。查詢日期,字符串的值時用單引號’01-2月-09’
2. 函數介紹
(1) 什么是函數?
是數據庫產品中提供的能夠處理查詢結果的方法。
函數可以:執行數據計算;修改單個數據項;格式化顯示的日期和數字;轉換列數據類型;函數有輸入參數,并且總有一個返回值。
函數語法:
Function_name(arg1,arg2,...)
Function_name:是函數的名字。
Arg1,arg2是有函數使用的任意參數。參數可以是一個列名、用戶提供的常數、變量值、或者一個表達式。
(2) 函數有哪些類型?
單行函數:這些函數僅對單個行進行運算,并且每行返回一個結果;
多行函數(聚合函數):這些函數能夠操縱成組的行,每個行組給出一個結果,這些函數也被稱為組函數。
(3) 單行函數的特點是?
單行函數是對每一行來計算。
(4) 多行函數的特點是什么?
多行函數是根據多行數據為計算基礎來進行運算的。比如計算平均工資。
3. 單行函數介紹
(1) 單行函數有什么特性?
作用域每一個返回行,每行返回一個結果;
可能需要一個或多個參數;
可以修改結果集的數據類型;
可以嵌套;
可能返回一個與參數不同類型的數據值;
能夠用在SELECT WHERE 和 ORDER BY子句中。
(2) Oracle中的單行函數分為幾大類?每一類的作用是什么?
字符:接受字符輸入,可以返回字符或者數字值;
數字:接受數字輸入,返回數字值;
日期:對DATE數據類型的值進行運算(除了MONTHS BETWEEN函數返回一個數字,所有日期函數都返回一個DATE數據類型的值。)
轉換:從一個數據類型到另一個數據類型轉換一個值。
通用:NVL NVL2 NULLIF COSLSECE CASE DECODE
4. 大小寫處理函數
(1) 在Oracle中能夠處理字符大小的函數有哪些?
LOWER (‘SQL Course’) 返回 sql course 轉換大小寫混合的字符串為小寫字符串
UPPER(‘SQL Course’) 返回 SQL COURSE 轉換大小寫混合的字符串為大寫字符串
INITCAP(‘SQL Course’) 返回Sql Course首字母大寫。將每個單詞的首字母轉換為大寫,其他字母小寫。大小寫處理函數需要一個參數,參數類型為字符串類型,返回一個字符串。
實例:查詢員工表,使用“The Job id for”連接轉換為大寫格式后的員工姓名,并使用“is”字符串連接他們工作ID,要求將工作ID轉換為小寫格式。修改列名為“EMPLOYEE DETAILS”。
SQL> select 'The Job id for '||upper(last_name)||' is '||lower(job_id) as "EMPLOYEE DETAILS" from employees;
顯示員工higgins的雇員號、姓名和部門號。
SQL> select employee_id,last_name,department_id from employees where lower(last_name) = 'higgins';
或者將字符串首字母大寫
SQL> select employee_id,last_name,department_id from employees where last_name = initcap('higgins');
5. 字符處理函數
(1) Oracle中的DUAL表時什么表?作用是什么?
DUAL是一張只有一個字段,一行記錄的表。DUAL表也稱為‘偽表’,因為他不存儲主題數據。如果我們不需要從具體的表來取得表中數據,而是單純的為了得到一些我們想要得到的信息,并要通過select完成時,就要借助DUAL表來滿足結構化查詢語言的格式。
(2) Oracle中能夠處理字符的函數有哪些?
CONCAT(‘Hello’,’World’) 返回 HelloWorld 字符串拼接
SUBSTR(‘HelloWorld’,1,5) 返回 Hello
LENGTH()返回字符串長度
INSTR(‘HelloWorld’,’W’) 返回6 索引從1開始
LPAD(salary,10,’*’) 返回 *****24000 用指定字符自動填充,填充在前
RPAD(salary,10,’*’) 返回 24000***** 用指定字符自動在后填充指定長度
TRIM(‘H’ FROM ‘HelloWorld’) 返回elloWorld 刪除指定字符串
(3) 每個字符函數的作用是什么?
CONCAT(arg1,arg2) 做兩個字符串的拼接。多個字符串需要嵌套。一次只能操作兩個字符串。
SUBSTR(arg1,arg2,arg3):截取子串。
Arg1:字符串類型。原字符串。
Arg2:整數類型。開始位置(開始位置可以是一個負數,-1表示原串的最后一位,-2則表示倒數第二位,以此類推)
Arg3:整數類型。截取個數。
SUBSTR(arg1,arg2,arg3):截取子串。
Arg1:字符串類型。原字符串。
Arg2:開始位置(開始位置可以是一個負數,-1表示原串的最后一位,-2則表示倒數第二位,以此類推)截取到末尾。
LENGTH(arg1):以數字值顯示一個字符串的長度。
Arg1:字符串類型。計算字符串的長度。
INSTR(arg1,arg2):找到一個給定字符的數字位置。
Arg1:字符串類型,原字符串。
Arg2:字符串類型。查找內容。
INSTR(arg1,arg2,arg3,arg4):指定查找位置以及出現的次數。
Arg1:字符串類型。原字符串。
Arg2:字符串類型。查找內容。
Arg3:整數類型。開始位置。
Arg4:整數類型。第幾次出現。
LPAD(arg1,arg2,arg3):用給定的字符左填充字符串到給定的長度。
Arg1:字符串類型。原字符串。
Arg2:整數類型。總長度。
Arg3:字符串類型。填充的子字符串。
RPAD(arg1,arg2,arg3):用給定的字符串右填充字符串到給定的長度。
Arg1:字符串類型。原字符串。
Arg2:整數類型。總長度。
Arg3:字符串類型。填充的子字符串。
TRIM(arg1):從一個字符串中去除頭(leading)或尾(trailing)或頭尾兩側(both)的字符(默認為頭尾兩側)如果trim_character 或 trim_source是一個文字字符,必須放在單引號中。
Arg1需要操作的字符串。from為關鍵字。
格式1:需要去掉的內容 from原字符串。
格式2:leading|trailing|both 需要去掉的內容from原字符串。
SQL> select trim('h' from 'helloworld') from dual;
SQL> select trim(trailing 'H' from 'HelloWorldH') from dual;
Replace(arg1,arg2,arg3):replace函數是用另外一個值來替代串中的某個值
Arg1:字符串類型。原字符串。
Arg2:字符串類型。需要替換的子串。
Arg3:字符串類型。要替換成的子串。
SQL> select replace('We are happy',' ','%20') from dual;
實例:顯示所有工作崗位名稱從第4個字符位置開始包含字符串REP的雇員的信息,將雇員的姓和名連接顯示在一起,還顯示雇員名的長度,以及名字中字母a的位置。
SQL> select concat(first_name,last_name) as name,length(last_name),instr(last_name,'a') from employees where substr(job_id,4,3)='REP';
顯示所有名字以n結尾的雇員的信息,將雇員的姓和名連接顯示在一起,還顯示雇員名的長度,以及名字中字母a的位置。
select concat(first_name,last_name) as name,length(last_name),instr(last_name,'a') from employees where substr(last_name,-1)='n';
將手機號的中間四位用*號代替。
SQL> select replace('13811326546',substr('13811326546',4,4),'****') from dual;
6. 數字函數
(1) Oracle中能夠處理數字的函數有哪些?
Round:四舍五入指定小數的值。
Trunc:截斷指定小數的值。
Mod:返回除法的余數。
(2) 每個處理數字的函數的作用是什么?
Round(arg1,arg2):四舍五入指定小數的值。
Arg1:數字類型。原數字。
Arg2:整數類型。小數點保留的位數,可以是一個負數。負數則表示指定整數的位置。
ROUND(arg1)四舍五入保留整數。
Round(arg1):四舍五入保留整數。
Arg1:數字類型。原數字。
Arg2:整數類型。小數點保留的位數。
Trunc(arg1,arg2):截斷指定小數的值,不做四舍五入處理。
Arg1:數字類型。原數字。
Arg2:整數類型。小數點保留的位數,可以是一個負數。負數則表示指定整數的位置。
TRUC(arg1):取整
MOD(arg1,arg2):取余函數。
Arg1:被除數。
Arg2:除數。
實例:計算所有是銷售代表(SA_REP)工資對5000取余的余數。
SQL> select last_name,salary,mod(salary,5000) from employees where job_id = 'SA_REP';
7. 日期的使用
(1) 在Oracle中如何獲取系統當前時間?
SYSDATE是一個日期函數,它返回當前數據庫服務器的日期和時間。
SQL> select sysdate from dual;
(2) 在Oracle中做日期計算有哪些特點?
從日期加或者減一個數,結果是一個日期值。
兩個日期相減,得到兩個日期之間的天數。
用小時除以24,可以加小時到日期上。
實例:顯示所有在部門90中的雇員的名字和從業的周數。雇員的總工作時間以周計算。
SQL> select last_name,round((sysdate-hire_date)/7) from employees where department_id=90;
8. 日期函數
(1) 在Oracle中能夠處理日期的函數有哪些?
MONTHS_BETWEEN 兩個日期之間的月數;
MONTHS_BETWEEN(date1,date2):計算date1和date2之間的月數。其結果可以是正的也可以是負的。如果date1大于date2,結果是正的。反之結果是負的。
ADD_MONTHS 加日歷月到日期;
ADD_MONTHS(date,n):添加n個日歷月到date。n的值必須是整數,但可以是負的。
Date:日期類型。
Date:日期類型。
NEXT_DAY 下個星期幾是幾號;
NEXT_DAY(date,’char’):計算在date之后的下一個周(‘char’)的指定天的日期。char的值可能是一個表示一天的數或者是一個字符串。如果使用數字表示星期,1是從星期日開始。數字范圍1-7。
LAST_DAY 指定月的最后一天;
LAST_DAY(date):計算包含date的月的最后一天的日期。
Date:日期類型。
SQL> select last_day(sysdate) from dual;
ROUND 四舍五入日期;
ROUND(date,’fmt’):返回用格式化模式fmt四舍五入到指定單位的date,如果格式模式fmt被忽略,date被四舍五入到最近的天。
Date:日期類型
Fmt:字符串類型
SQL> select round(sysdate,'yy') from dual;
SQL> select round(sysdate,'mm') from dual;
TRUNC 截斷日期
TRUNC(date,’fmt’):返回用格式化模式fmt截斷到指定單位的帶天的。如果格式模式fmt被忽略,date被截斷到最近的天。
Date:日期類型。 fmt:字符串類型。
實例:查詢所有受雇在15年(180個月)以內的雇員的employee_id,hire_id,顯示他們已被雇傭的月,從受雇日期開始加6個月的試用期后的日期,受雇日期后的第一個星期五是幾號,以及受雇月的最后一天是幾號。
SQL> select employee_id,hire_date,round(months_between(sysdate,hire_date)),add_months(hire_date,6),next_day(hire_date,'星期五') from employees where months_between(sysdate,hire_date)<180;
實例:查詢受雇日期,找出2002年開始工作的那些人。用ROUND和TRUNC函數顯示開始的月份。
SQL> select employee_id,last_name,round(hire_date,'mm'),trunc(hire_date,'mm') from employees where hire_date like '%02';
9. 隱式數據類型轉換
(1) 在Oracle中什么是隱式數據類型轉換?
當源數據的類型和目標數據的類型不同的時候,如果沒有轉換函數,就會發生隱式轉換,也稱自動轉換。
(2) 哪些數據類型支持隱式類型轉換?
對于直接賦值的隱式轉換:
從VARCHAR2 OR CHAR 到 NUMBER
從VARCHAR2 OR CHAR 到 DATE
從NUMBER到VARCHAR2
從DATE到VARCHAR2
對于表達式賦值的隱式轉換:
從VARCHAR2 OR CHAR 到 NUMBER
從VARCHAR2 OR CHAR 到 DATE
(3) 隱式數據類型轉換有哪些問題?
1-性能影響:隱式轉換的最大問題就是轉換時會導致索引的無效,進而可能導致全表掃描。當表的數據量很大的時候,會產生很大的性能問題。比如說,VARCHAR2和NVARCHAR2隱式數據類型轉換導致的性能問題。
2-不便于閱讀:由于隱式轉換使得數據庫編程人員和DBA難以了解到究竟發生了怎樣的類型轉換,而且如果代碼很多很長的話要查出錯誤就需要消耗很大的精力。
(4) 什么是顯示數據類型轉換?
通過數據庫中的轉換函數完成數據類型的轉換。
10. 日期到字符的轉換
(1) Oracle中提供了哪些轉換函數?
TO_NUMBER
TO_DATE
TO_CHAR
(2) 每個轉換函數的作用是什么?
TO_CHAR(arg1,’fmt’):將一個日期或者數字轉換為字符類型。帶格式化樣式fmt。
Arg1:數字或者日期類型。需要轉換的數據。
Fmt:轉換格式。
(3) 在Oracle中將日期轉換成字符使用什么函數完成?
TO_CHAR
(4) 日期格式的模板元素有哪些?
YYYY 數字全寫年
YEAR 數字全寫年
MM 月的兩數字值
MONTH 月的全名
MON 月的三字母縮寫
DY 周中天的三字母縮寫
DAY 周中天的全名
DD 月的數字天
SCC或CC 世紀,帶-服務器前綴B.C. 日期
日期中的年YYYY或SYYYY 年,帶-服務器前綴B.C. 日期
YYY或YY或Y 年的3、2或1個數字
Y,YYY 年,在這個位置帶逗號
IYYY,IYY,IY,I 基于ISO標準的4、3/2或1位數字年
SYEAR或YEAR 拼寫年;帶-服務器前綴B.C.日期
BC或AD B.C.A.D指示器
B. C. 或 A.D. 帶周期的B.C./A.D.指示器
Q 四份之一年
MM 月:兩位數字值
MONTH 9位字符長度的帶空格填充的月的名字
MON 3字母縮寫的月的名字
RM 羅馬數字月
WW或W 年或月的周
時間格式模板
AM或PM 正午指示
A. M或P.M 帶句點的正午指示
HH或HH12或HH24 天的小時,或小時(1-12),或小時(0-23)
MI 分鐘(0-59)
SS 秒(0-59)
SSSSS 午夜之后的秒(0-86399)
日期的時間部分,時間元素格式
HH24:MI:SS:AM 15:45:32 PM
加字符串,將他們括在雙引號中
DD “OF” MONTH 12 OF OCTOBER
數字前綴拼出數字
Ddspth fourteenth
其他格式
/. 在結果中使用標點符號
“of the” 在結果中使用引文串
指定后綴來影響數字顯示
TH 序數(例如,DDTH顯示為4TH)
SP 拼寫出數字(例如,DDSP顯示為FOUR)
SPTH OR THSP 拼寫出序數(例如,DDSPTH顯示為FOURTH)
實例:顯示所有雇員的名字和受雇日期,受雇日期以2007年8月10日 12:00:00AM顯示。
SQL> select last_name,to_char(hire_date,'yyyy"年"mm"月"dd"日" hh:mi:ss am') from employees;
11. 數字到字符的轉換
(1) 在Oracle中講數字轉換為字符的函數是什么?
To_char
(2) 數字格式模板有哪些?
9 表示一個數
0 強制顯示為0,如果有數字不改變,如果沒數字則用0填充
$ 放置一個浮動美元符號
L 使用浮動本地貨幣符號
. 打印一個小數點
, 打印一個千分號
FM:代表去掉返回結果中的前后空格和0
模板的長度一定要大于等于實際數字的長度。
實例:查詢雇員Whalen,顯示他的薪水,在薪水前添加美元符號與千位符。
SQL> select last_name,to_char(salary,'fm$999,999,999.00') from employees where last_name = 'Whalen';
12. 字符到數字的轉換
(1) 在Oracle中將字符轉換為數字的函數是什么?
To_number
TO_NUMBER(‘arg1’,fmt):將字符串轉換為數值型的格式。帶格式化樣式fmt。
Arg1:字符串類型。需要轉換的數據。
Fmt:轉換格式。模板與數字轉字符格式模板一致。
(2) 將¥34,346.56轉換為數字類型。
SQL> select to_number('¥34,346.56','L999,999.99') from dual;
總結
以上是生活随笔為你收集整理的oracle中prad函数_024 SQL函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 社保没缴满15年,2020还可以这样补救
- 下一篇: 2020年公积金提前还款利息怎么算?