oracle內置函數
1. nvl(expression1, expression2)
函數作用:從兩個表達式中返回一個非null值
用例:select nvl(father_name, mother_name) parent_name from student where student_id = '12345'
注意:
如果expression1的值非空,優先取expression1的值;
如果expression1的值空且expression2的值非空,則取expression2的值;
如果expression1和expression2均為空,則結果為NULL
2. decode(field_name, value1, new_value1, value2, new_value2, default_value)
函數作用:類似if...else...語句塊,針對某個字段,如果它的值為value1,則轉換為newValue1,如果值為value2,則轉換為newValue2,其他情況顯示默認值
用例:select decode(id,'1','A','2','B',id) from A;
注意:
decode(field_name, value1, new_value1, value2, new_value2, default_value)其中的value1,newValue1等可以是一個表達式
3. row_number(order by field_name)
函數作用:將數據集按照某個字段排序,并產生序號字段
用例:select row_number() over(order by name) no,id,name from a;
4. to_date(source_string, formater_string)
函數作用:將字符串轉換為日期類型
用例:select to_date('20190809','yyyyMMdd') from dual;
注意:
'yyyyMMdd','yyyymmdd','yyyy-MM-dd','yyyy-mm-dd'都可以
5. to_char()
函數作用:將其他類型轉換為字符串類型
用例1:select to_char(sysdate, 'yyyymmdd') from dual
用例2:select to_char(99, 'fm999.00') from dual
注意:
用例1中還有很多其他的日期格式,如yyyy,mm,dd,D,DD,DDD等
用例2中fm,9,0都有不同的含義,如下表所示
字符標志 含義
9 如果存在數字則顯示數字,不存在則顯示空格
0 如果存在數字則顯示數字,不存在則顯示0,即占位符
fm 刪除因為9帶來的空格
6. wm_concat
函數作用:行轉列,將多行查詢結果聚合到一行的某一列中
用例:select wm_concat(distinct name) from student
注意:高版本oracle可能會去掉
7. listagg() within group(order by field_name) over(partition by field_name)
函數作用:同wm_concat
用例:select listagg(distinct name) within group(order by name desc) from student
8. concat(expression1, expression2)
函數作用:字符串拼接函數
用例:select concat('left', 'Right') from dual
注意:也可以利用 || 進行拼接,select 'a'||'b' from dual
9. sys_guid()
函數作用:產生并返回一個全球唯一的標識符(原始值)由16個字節組成,32個字符
用例:select sys_guid() from dual;
注意:經常用來做表的主鍵
10. over(partition by field_name, order by field_name)
函數作用:over函數是一個分析函數,和聚合函數搭配在一起使用可以簡潔代碼
用例:
select name, job, sal, deptno,
sum(sal) over(partition by deptno) sum_sal, --統計某組中的總計值
avg(sal) over(partition by deptno) avg_sal, --統計某組中的平均值
from emp;
注意:按照以前的寫法先進分組統計產生臨時表關聯原表才可以取到其他信息,現在則不需要了
通常和max(),min(),avg(),sum()等聚合函數一起使用
11. nlssort
函數作用:提供簡體中文的特殊排序
用例:
select * from student order by nlssort(name, 'nls_sort = schinese_pinyin_m') --拼音
select * from team order by nlssort(name, 'nls_sort = schinese_stroke_m') --筆畫
select * from team order by nlssort(name, 'nls_sort = schinese_radical_m') --部首
12. trunc
函數作用:是截取日期或數字,根據規則返回指定的值
用例1:select trunc(sysdate, 'yyyy') from dual
用例2:select trunc(126.56, 0) from dual
注意:
用例1還有其他規則代表不同的含義
規則 含義
mm 返回當月第一天
yy 返回當年第一天
dd 返回當前年月日
yyyy 返回當年第一天
d 返回當前星期的第一天
用例2還有其他規則代表不同含義
規則 含義
0 默認值,取下取整
正數a 保留小數點后面a位小數,其他的抹掉,如果a比小數點后的位數多,則保留原值
負數b 小數點后面的全部去掉,小數點向左移動abs(b)位,用0代替被抹掉的數字,如果所有數字都被抹掉,則返回0
13. rank() over(partition by field_name order by field_name)
函數作用:讓返回結果根據分區和排序字段產生排名關系
用例:select rank() over(partition by birthday order by score), s.* from student s;
注意:dense_rank()用法和rank()一樣,區別在于排名是否跳躍
14. substr(source, start [,length])
函數作用:截取字符串
用例:select substr('abcde', 2, 3) from dual
注意:oracle字符串索引從1開始
15. replace(field_name, sub_str, replace_str)
函數作用:將指定的字符串替換為指定的字符串
用例:select replace(name, 'hello', 'world') from student;
注意:也可以用在update語句set部分
16. trim
函數作用:去掉左右兩端的空白字符
用例:select trim(' dsf ') from dual;
注意:僅去掉左邊空白字符用ltrim,僅去掉右邊空白字符用rtrim
17. sign
函數作用:取數字n的符號,大于0返回1, 小于0返回-1, 等于0返回0
用例:select sign(50),sign(-100),sign(0) from dual;
18. round(number[,decimal])
函數作用:對數字n進行四舍五入處理,保留decimal位小數
用例:select round(123.34),round(123.51),round(123.56,1),round(123.34,-1) from dual;
19. coalesce(expression1,expression2...)
函數作用:返回表達式中第一個不為空的值,如果全為空則返回空值
用例:select coalesce(null,3+5,4+6) value from dual;
20.initcap(string)
函數作用:將“string”的字符轉成大寫
用例:select initcap( column_name) from dual;
21.upper(string)
函數作用:返回大寫的“string”。
用例:select upper('aptech computer education') from table_name;

浙公網安備 33010602011771號