蔡小艷 崔艷萍 孟憲宇 閻知知
摘要:針對學生對Oracle函數學習、理解較難的狀況,筆者結合士兵表,靈活應用Oracle的內置函數完成了各種士兵信息的查詢,通過實例深入淺出地介紹了常用內置函數的作用與功能。
關鍵詞:Oracle數據庫;字符函數;數字函數;轉換函數
中圖分類號:TP311 文獻標識碼:A
文章編號:1009-3044(2019)27-0122-02
Oracle數據庫系統(tǒng)提供了許多內置函數,按照操作的數據行數可以分為單行函數和聚合函數;按照操作的數據類型和功能又可以分為字符函數、數字函數、日期函數、聚合函數和轉換函數等。本文主要介紹在Oracle數據庫教學中常用的幾類函數。
1字符函數
1.1 substr(string,Start,length)
函數substr(string,start,length)的功能是返回string中的一個子字符串,這個子字符串從start處開始,取length個字符。
例1:從士兵表中統(tǒng)計各個省份的士兵人數。
分析:籍貫字段中包含了省、市或縣的信息,如果按省份來統(tǒng)計士兵的人數,則需要使用substr()函數提取籍貫字段中的省份信息。
selectsubstr(籍貫,1,3)省份,count(*)士兵人數
from士兵表
groupbysubstr(籍貫,1,3);
1.2 concat(stringl,string2)
函數concat(stringl,string2)的功能是連接stringl和string2兩個字符串。
例2:根據直招士官的士兵登記表號生成其士兵證號。
分析:直招士官的士兵證號編碼規(guī)則為在士兵登記表號前加綴“士字第”,在士兵登記表號末位加綴1位大寫英文字母“z”。士兵表中每位士兵的士兵登記表號已錄入,生成士兵證號則需要嵌套使用concat()函數,分別給士兵登記表號添加前綴和后綴。
update士兵表
set士兵證號=concat(concat('士字第,士兵登記表號),z號)
where士官來源=直招士官;
2日期時間函數
sysdate
函數sysdate的功能是返回當前系統(tǒng)的日期時間。
在Oracle數據庫的教學中,主要使用sysdate函數配合出生年月、入伍年月來計算士兵的年齡、兵齡等信息。
3數字函數
3.1 trtmc(x,[y])
函數trunc(x,[y])的功能是對x進行截取,y為可選參數,說明對x截取到第幾位小數。如果沒有指定v或者v為0,則對x進行取整;如果y大于0,則截取x至小數點右邊的第y位;如果y小于0,則對x小數點左邊指定v位的部分置0,小數被去掉。
例3:查詢年齡在18到20之間的士兵姓名、性別、籍貫和年齡。
分析:士兵表中有出生年月字段,沒有年齡字段。在查詢士兵年齡時,需要借助Oracle的日期時間函數sysdate和出生年月字段來計算年齡。
select姓名,性別,籍貫,trunc((sysdate-出生年月)/365,0)年齡from士兵表
where trunc((sysdate-出生年月)/365,0)between18and20;
3.2 round(x,[y])
函數round(x,【y】)的功能是按照參數y對x進行四舍五入截取。如果沒有指定y或者y為0,則對x進行四舍五入并取整;如果y大于0,則截取x至小數點右邊的第y位并四舍五入;如果y小于0,則對x小數點左邊指定v位的部分置0,小數被去掉。
例4:查詢軍銜為下士并且下士服役即將滿3年的士兵。
分析:士兵表中有軍銜時間字段,沒有服役年限字段。在查詢服役時間時,需要借助Oracle的日期時間函數sysdate和軍銜時間字段來計算服役年限。
select*
from士兵表
where軍銜=下士'and round(、(sysdate-軍銜時間)/365,0)=3;
4轉換函數
4.1to_date(x,[format])
函數to_date(x,[formall)的功能是按照format格式,將字符串x轉化為日期時間數據。如果省略了format格式,則默認的日
期時間格式是DD-MM-YY。