oracle之單行函式

2021-12-30 12:34:40 字數 4159 閱讀 1637



單行函式

①.字元函式

lower(x):將x中的每個單詞都轉換成小寫

upper(x):將x中的每個單詞都轉換成大寫

initcap(x): 將x中的每個單詞的首字母轉換成大寫

concat(x,y):用於將y新增到x之後,與||功能一樣

substr(x,start[,length]): 用於從x中取得從start位置開始的乙個子字串,

可選引數length:指定子字串的長度,若未給定,一直取到字串的最後

length(x):返回x中字元的個數

instr(x,find_string[,start][,occurence]):在x中查詢find_string,返回find_string所在的位置,

可選引數start:說明從x中的哪個位置開始查詢,第乙個位置為1.

可選引數occurence:說明應該返回find_string第幾次出現的位置

lpad(x, width [,pad_string]):用於將x的左邊補齊空格,使總長度達到width個字元

可選引數pad_string:若給定,就將x的左邊補齊pad_string字元

rpad(x,width[,pad_string]):用於將x的右邊補齊空格,使總長度達到width個字元

可選引數pad_string:若給定,就將x的右邊補齊pad_string字元

trim(x[,trim_string]):用於從x的左右兩邊截去一些空格

可選引數trim_string:若給定,則從x的左右兩邊截去一些trim_string字元

replace(x,search_string,repalce_string):用於在x中查詢search_string,並將其替換為replace_string

②數字函式

四捨五入:round(x[,y])用於計算對x取整結果

可選引數y:說明對第幾位小數取整,如果沒有指定y,則對x在0位小數處取整

如果y為負數,則對x在小數點的左邊的第|y|位處取整

截斷:trunc(x[,y])用於計算對x截斷的結果

可選引數y:說明對第幾位小數截斷,如果沒有指定y,則對x在0位小數處截斷

如果y是負數,則對x在小數點的左邊的第|y|位處截斷

求餘:mod(x,y):用於計算x除以y所得的餘數

③日期函式

months_between(date1,date2):兩個日期相差的月數

add_months(date1,addmonth):向指定日期中加上若干月數

next_day(date1,'星期一'):返回下乙個星期一的日期

last_day(date1):本月的最後一天

round(date1,'year'):把date1按年四捨五入,month、day、hh、mi分別是按月、日、時、分,進行四捨五入

trunc(date,'month'):把date1按年截斷,month、day、hh、mi分別是按月、日、時、分,進行截斷

④轉換函式

to_char(date, 'format_model'):按format_model格式,格式化date:"yyyy-mm-dd hh24:mi:ss",返回乙個字串

to_char(number, 'format_model'):按format_model格式,格式化number:"$99,999.99",返回乙個字串

to_date(char[, 'format_model']):使用 to_date 函式將字元按format_model格式轉換成日期:"yyyy-mm-dd hh24:mi:ss"

to_number(char[, 'format_model']):使用 to_number 函式將字元按format_model格式轉換成數字:"$99,999.99"

⑤通用函式:這些函式適用於任何資料型別,同時也適用於空值

nvl (expr1, expr2):如果expr1為null,則返回expr2,若不為null,則返回expr1

nvl2 (expr1, expr2, expr3)如果expr1不為null,則返回expr2,若為null,則返回expr3

nullif (expr1, expr2):expr1與expr2相等返回null,不等返回expr1

coalesce (expr1, expr2, ..., exprn):依次參考各引數表示式,遇到非null值即停止並返回該值。

如果所有的表示式都是空值,最終將返回乙個空值。使用coalesce在於大部分包含空值的表示式最終將返回空值。

⑥條件表示式

1)case 表示式

case..when..then..

case表示式,是可以在sql中使用if ..then..else的邏輯判斷,而避免使用pl/sql的有效方法。

在sql中主要有兩種:簡單case和搜尋case,在plsql中還有兩種case 語句,與decode 類似。(有一定的區別)

簡單的case:

語法:case exp when comexp then returnvalue

..when comexp then returnvalue

else returnvalue

end使用規則case簡介。

case到end之間相當於乙個具體的值,可以做運算,取別名,巢狀case 等等。只要把case到end當作乙個運算結果的表示式就可以了。

《注意,中間一直到end 都沒有其他標點符號》

搜尋case:

select cust_last_name,

case credit_limit when 100 then 』low』

when 5000 then 』high』

else 』medium』

endfrom customers;

搜尋case例子

select case when id between 1 and 10 then 'low'

when id between 20 and 30 then 'mid'

when id between 40 and 50 then 'high'

else 'unknow'

endfrom product;

update emp set

salary=

case when salary<2000 then salary*1.1

when salary between 2000 and 4000 then salary*1.05

when salary>4000 then salary*1.04

else

null

end;

select case when name like '全球%' then 'true'

when name like '神州行' then 'false'

else 'mm'

endfrom trademark;

比較操作,可以使用like,between … and ..,!=,=等操作符以及其他返回boolean型別的操作符。

簡單case和searched case之間的區別:

1. 簡單case只能是when後面的表示式完全匹配case後的表示式,相當於 =,所以也不能匹配null。

2. searched case可以作為比較條件,那麼可以使用like,!=,between ..and,

2)decode 函式

decode 中的if-then-else邏輯

在邏輯程式設計中,經常用到if – then –else 進行邏輯判斷。在decode的語法中,實際上就是這樣的邏輯處理過程。

它的語法如下:

decode(value, if1, then1, if2,then2, if3,then3, . . . else )

value 代表某個表的任何型別的任意列或乙個通過計算所得的任何結果。

當每個value值被測試,如果value的值為if1,decode 函式的結果是then1;

如果value等於if2,decode函式結果是then2;等等。事實上,可以給出多個if/then 配對。

如果value結果不等於給出的任何配對時,decode 結果就返回else 。

需要注意的是,這裡的if、then及else 都可以是函式或計算表示式。

⑦巢狀函式

f3(f2(f1(col,arg1),arg2),arg3)

單行函式可以巢狀。巢狀函式的執行順序是由內到外

oracle學習之單行函式

一 單行字元型函式 常用的字元型函式有 cancat 字元竄1,字串2 該函式用於連線兩個字串 select concat ename,測試 from emp substr 字串,n,m 該函式用於擷取字串,n表示才第幾個字元開始,m表示長度 upper 字串 該函式用於將字串變為大寫 lower ...

oracle單行函式

1.字元函式 upper 全大寫 lower 全小寫 initcap 首字母大寫 length 取長度 substr 擷取字串 replace 替換 2.數值函式 round 四捨五入 trunc 擷取 mod 取餘 3.日期函式 當前日期 sysdate 日期 數字 日期 日期 數字 日期 日期 ...

oracle單行函式

單行函式 函式類別 單行 返回單個結果 substr,length 多行 返回多個結果,any,all 單行的分類 字元類,日期類,數字類,轉換類,通用類 1.字元類 轉換大小寫 lower 轉換為小寫 select ename,lower ename from emp upper 轉換為大寫 se...