前言: 想把單行函數進行一個比較全面的總結,並分享給有需要的人,有不明之處還請多多指教。 SQL函數:Oracle的內置函數,包括了單行函數和多行函數,本文重點講解單行函數。單行函數又可以分為許多類,本人將常用的分為5大類: 字元函數(7個),數值函數(7個),日期函數(7個),轉換函數(3個),通 ...
前言:
想把單行函數進行一個比較全面的總結,並分享給有需要的人,有不明之處還請多多指教。
SQL函數:Oracle的內置函數,包括了單行函數和多行函數,本文重點講解單行函數。單行函數又可以分為許多類,本人將常用的分為5大類:
字元函數(7個),數值函數(7個),日期函數(7個),轉換函數(3個),通用函數(9個),下麵開始分析。
一、字元函數:
1.concat函數:用來拼接2個字元串,Expression:concat(str1,str2);
Example:
select concat('milktea','leaf') from dual;
結果如圖:
註意:concat函數不能處理2個以上的字元串拼接,否則會報參數個數無效的錯誤。
select concat('milktea','leaf','third') from dual;
2、substr函數:用於截取字元串,從指定位置index截取指定長度length的字元串。Expression:substr(str,index,length);
Example:
select substr('milktealeaf',5,3) from dual;
結果如圖:
註意:此處字元串的下標從1開始,index的值是幾就是第幾個。
另外還有一個substrb函數,和substr函數作用相同,但2者稍有差別:substr按字元取,而substrb按位元組取。結論顯而易見:
在取英文字母時,2者相同,但在取漢字時,一個漢字2個位元組,如果是奇數個位元組則自動捨棄最後一位,示例如下:
select substr('milktealeaf',2,5) from dual;
select substrb('milktealeaf',2,5) from dual;
select substr('李先森陳小姐你們好呀',2,5) from dual;
select substrb('李先森陳小姐你們好呀',2,5) from dual;
3、Instr函數:用於獲取一個字元串中子串str_son在字元串str_father中從index下標查找第times次出現的位置,返回一個下標
Expression:(str_father,str_son,index,times)
Example:
select instr('milkteatealeaftea','tea',3,2) from dual;
註:如圖所示。第二個tea在下標為8處。
另外,也有一個instrb函數,同substr和substrb函數一樣,instr用於字元,instrb用於位元組,示例如下:
select instr('李先森陳女士李先森李先森陳女士','李先森',3,2) from dual;
select instrb('李先森陳女士李先森李先森陳女士','李先森',3,2) from dual;
4、length函數:返回一個字元串的長度 Expression:length(str);
Example:
select length('milktea') from dual
5、lpad函數:用於對字元串左側進行填充的函數,l即為left,Expression:lpad(str1,length,str2)其中str1為被填充的字元串,length為填充以後的長度,str2為要填充的字元。
Example:
select lpad('leaf',9,'%*') from dual;
註:從左側開始填充,只要長度達到立即停止,不管要填充的字元串有沒有填充完整。有了左填充,必然有右填充rpad,r即為right,從字元串右側進行填充。示例如下:
select rpad('leaf',9,'%*') from dual;
6、replace函數:顧名思義,替換函數,將字元串中的子串用其他字元進行替換。Expression:replace(str_father,str_son,str_replace);
Example:
select replace('milkteathird','third','leaf') from dual;
7、ltrim函數:去掉字元串左側的空白。 Expression:ltrim(str)
Example:
select ltrim(' milktea leaf ') from dual;
可以看到左側空白已經去除,那麼同樣的有rtrim函數,去掉右側空白。去空白,那麼當然左右2側都去也可以,trim函數。示例如下:
select rtrim(' milktea leaf ') from dual;
select trim(' milktea leaf ') from dual;
二、數值函數:
1、round函數:用於對一個數取四捨五入後的結果。Expression(number,m) number為數字,m為要四捨五入的位數,必須為整數。
Example:
select round(13.14,1) from dual;
select round(13.14,-1) from dual;
可以看出,當位數為正數時,保存小數點後面的位數,負數時直接取整數部分的四捨五入。
2、trunc函數:直接進行截取數字,不進行四捨五入。Expression: trunc(number,m)number為截取的數字,m為截取的位數。
Example:
select trunc(15.15,1) from dual;
select trunc(15.15,-1) from dual;
並沒有進行四捨五入,直接截取,毫不留情。
3、mod函數:對2個數進行取模運算,如果除數為0 ,則返回被除數。Expression:mod(number1,number2)
Example:
select mod(5,2) from dual;
select mod(3,0) from dual;
4、ceil函數:用於返回大於等於當前數的最小整數 Expression:ceil(number)
Example:
select ceil(13.14) from dual;
5、floor函數:和ceil函數相反,用於返回小於等於當前數的最大整數 Expression:floor(number)
Example:
select floor(13.14) from dual;
6、abs函數:返回當前數的絕對值:Expression:abs(number)
Example:
select abs(-1314) from dual;
7、cos函數:返回當前數的餘弦值 Expression:cos(number)
Example:
select cos(0) from dual;
三、日期函數:
1、sysdate函數:返回系統當前日期 Expression :sysdate
Example:
select sysdate from dual;
2、round函數:對日期取四捨五入的結果,如果精度是日的話以每周周四為標準,精度是月以每月16日為標準,精度是年以每年7月1日為標準。 分別四捨五入到最近的周日,每月1號,以及每年1月1日, Expression:round(date,'format')
Example:
select round(sysdate,'day') from dual;
select round(sysdate,'month') from dual;
select round(sysdate,'year') from dual;
可以看到現在的時間過了周三,取最近的周日8月5日,按月份還沒過16日,取每月1日,按年份已經過了7月1日,取下一年的1月1日。
3、trunc函數:截取日期,精度為日,取當前星期的第一天(按第一天是周日算),精度為月,按每月第一日算,精度為年,按每年1月1日算。Expression:trunc(date,'format')
Example:
select trunc(sysdate,'day') from dual;
select trunc(sysdate,'month') from dual;
select trunc(sysdate,'year') from dual;
今天周六,取上周日7月29,按月份取本月1日,按年份取今年1月1日。
4、add_months函數:在日期的基礎上加減整月後的日期,Expression:add_months(date,number)其中date為日期,number為整數。
Example:
select add_months(sysdate,3) from dual;
select add_months(sysdate,-3) from dual;
5、months_between函數:返回2個日期之間的月份差數,參數前者大於後者返回正數,前者小於後者返回負數。Expression:months_between(date1,date2);
Example:
select months_between(to_date('2018-8-4','YYYY-MM-DD'),to_date('1949-10-1','YYYY-MM-DD')) from dual;
6、next_day函數:用於返回特定日期後的特定某一天(比如工作日)Expression:next_day(date,str)其中str對應特定某一天,必須與日期語言匹配,如果語言是America,那麼周一為Monday,語言是簡體中文,對應星期一。
Example:
select next_day(sysdate,'星期一') from dual;
7、last_day函數:用於取特定日期的當月最後一天。Expression:last_day(date)
Example:
select last_day(sysdate) from dual;
四、轉換函數:
1、to_char函數:分為2類
(1)日期轉字元:Expression: to_char(date,format,nlsparams)其中nlsparams指定日期的顯示語言,格式為:'NLS_DATE_LANGUAGE=LANGUAGE',也可以不要。
Example:
select to_char(sysdate,'DD-MON-RR','NLS_DATE_LANGUAGE=AMERICAN') from dual;
select to_char(sysdate,'YYYY"年"MM"月"DD"日"') from dual;
註意:如果格式中帶有字元時,須將字元用雙引號引起來。
(2)數值轉字元:Expression: to_char(number,format)
此處格式常用有:1) 9:顯示數字,忽略前導0;2)0:顯示數字,位數不足用0補齊;3).:小數點; 4),:逗號 5)$:顯示美元符號; 6)L:本地貨幣符號
Example:
select to_char(1314520,'L99,999,99.99') from dual;
2、to_date函數:用於將字元串轉化為日期類型 Expression: to_date(str,format,nlsparams)其中nlsparams可不要
Example:
select to_date('1999-02-17','YYYY-MM-DD') from dual;
3、to_number函數:用於將含有數字的字元串轉化為數值類型:Expression: to_number(str,format)
Example:
select to_number('$1314520','$999999999.99') from dual;
註意:此處format的作用限制了數的範圍,當format裡面的格式如果比字元串中的數字小的話,會報錯,示例如下:
select to_number('$1314520','$99999.99') from dual;
五、通用函數:
下麵實例多用到Oracle中scott用戶下的emp表,數據如下:
1、nvl函數:解決值為null的問題,當第一個參數為空時,返回第二個參數的值 Expression: nvl(expr1,expr2)
Example:
select nvl(comm,000) from emp;
註意表達式2中值的類型須和原來欄位的類型相同。
2、nvl2函數:如果參數列表中,第一個表達式的值不為空,則返回第二個表達式的值,如果為空,則返回第三個表達式的值。Expression: nvl2(expr1,expr2,expr3)
Example:
select nvl2(comm,comm,000) from emp;
3、nullif函數:用於判斷2個表達式的值是否相等,相等返回null,不等返回第一個表達式的值。Expression: nullif(expr1,expr2);
Example:
select nullif(job,'MANAGER') from emp;
4、coalesce函數:用於返回表達式中第一個not null的結果 Expression:coalesce(expr1,expr2,expr2,expr...)
Example:
select coalesce(comm,null,0) from emp;
5、case表達式:根據取值不同返回不同的結果。 Expression:
case expr
when value1 return result1
when value2 return result2
when value3 return result3
when ......
else result
end
Example:
select ename, case job when 'CLERK' then '辦事員' when 'SALESMAN' then '銷售' when 'MANAGER' then '經理' when 'ANALYST' then '分析員' else '總裁' end from emp
6、decode函數:根據取值不同返回不同的結果。和case表達式的作用相同,Expression: decode(expr,'value1','result1','value2','result2',...,result)
當expr的值為value1是返回結果result1,值為value2時返回結果result2,如果都沒有就返回預設值result;
Example:
select ename,decode(job,'CLERK','辦事員','SALESMAN','銷售','MANAGER','經理','ANALYST','分析員','總裁')from emp;
7、sign函數:判斷當前數字的符號,大於0返回1,等於0返回0,小於0返回-1 Expression: sign(number)
Example:
select sign(13),sign(0),sign(-14) from dual;
8、ascii函數:用於返回當前字元對應的ascii碼表中的位置 Expression: ascii(str)
Example:
select ascii('a') from dual;
9、chr函數:和ascii函數剛好相反,返回ascii碼表中的字元 Expression: chr(number)
Example:
select chr(97) from dual;
到此為止,oracle的單行函數已全部總結完畢,有需要的童鞋可以進來看看,後續還會總結其他,等待up主更新~
2018-08-04 17:20:42