1. 程式人生 > >Oracle數據庫常用SQL函數

Oracle數據庫常用SQL函數

數據 結果 rtrim 字母轉 power 復制 HERE 現在 虛擬

1.SQL函數的概念:


函數一般是在數據上執行的,它給數據的轉換和處理提供了方便。只是將取出的數據進行處理,不會改變數據庫中的值。(類似於java中的方法但函數只是將數據庫中的數據取出(復制)到函數中進行運算,並不會修改數據庫中的數據)

2.Sql函數可以分為組函數和單行函數。


–單行函數對單個數值進行操作,並返回一個值
–組函數又被稱作聚合函數,用於對多行數據進行操作,並返回一個單一的結果,組函數僅可用於選擇列表或查詢的having子句

3.單行函數的分類:


單行函數分為字符函數、數字函數、日期函數、轉換函數和其他函數

3.1.字符函數


字符函數全以字符作為參數,返回值分為兩類:一類返回字符

值,一類返回數字值

常用函數如下:
1.concat(a,b) 拼接a,b兩個字符串數據
例:select concat(ename,job) from emp;
如果需要拼接多個字符串可用concat()進行嵌套
例:select concat(concat(ename,‘的職位是‘),job)from emp;
2.initcap(x) 將每個單詞的首字母轉大寫
例:select initcap(‘ab cde‘) from dual;
結果為Ab Cde
其中dual是一個虛擬表
3.lower() / upper() 將字符串小寫/將字符串大寫
例:select lower(‘AbCde‘) from dual;

結果為abcde
select upper(‘AbCde‘) from dual;
結果為ABCDE
4.length() 獲取字符串的長度
例:select length(‘abcde‘) from dual;
結果返回5
5.lpad(a,b,c) /rpad(a,b,c) 將a字符串左邊/右邊填充至b長度,用c字符填充(默認為空格)
6.ltrim(a,b) / rtrim() 去除a字符串左邊的b字符,如果b不傳參,默認去除空格
7.replace(a,b,c) 將a中的b字符串替換為c
8.substr(a,b,c) 將a的字符串,從b位置開始截取,截c個長度
9.trim( a from b) 將b左右兩邊的a字符去除掉

3.2.數字函數


數字函數以number類型為參數返回number值
常用函數:
1.abs() 求取絕對值
2.ceil() 向上取整
3.floor() 向下取整
4.round() 四舍五入
5.power(x,y) x的y次冪

3.3.日期函數


Oracle以內部數字格式存儲日期:世紀,年,月,日,小時,分鐘,秒
常用函數:
1.sysdate 返回系統當前日期,註:沒有括號
2.add_months(d1,d2) 在d1日期上,增加d2個月份
3.months_between(d1,d2) 返回d1和d2之間的相隔月份
4.last_day(d) 返回d日期所在月份最後一天的日期
5.next_day(d,X) 返回下一個星期X的日期

3.4.轉換函數


轉換函數提供了字符和數字的相互轉換 &字符和日期的相互轉換

1.to_char() 將數字、或日期轉化為字符串
2.to_date() 將字符串轉化為日期
3.to_number() 將字符串轉化為數字

3.5.其他函數


1.nvl(x,y) 如果x為null,則顯示為y,x和y的類型保持一致
2.sys_guid() 生成一個的32位隨機字符串
3.decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值) 條件取值,類同java的switch(等值判斷)
4.case when then else end 條件取值,類同java的if-else-if(範圍判斷)
select 列,case when 條件判斷 then ‘值1‘
when 條件判斷 then ‘值2‘
when 條件判斷 then ‘值3‘
when 條件判斷 then ‘值4‘
else ‘缺省值‘ end from 表;

4.組函數


組函數不處理空字段(忽略空字段)
1.avg()求平均值,只能對數字類型進行處理
2.sum()求和,只能對數字類型進行處理
3.count()計數,對任何類型生效
4.max() 求最大值,對任何類型生效
5.min() 求最小值,對任何類型生效

5.group by關鍵字(創建分組)


5.1作用:
對查詢結果按指定列進行分組處理

5.2用法:
1.分組之後,select後面的列只能是group by 後面指定的列
2.group by 後面可以跟多個列,則這多個列值都相同時,才分為一組
3.如果分組列中具有null值,則null將作為一個分組返回
4.分組之後,可以使用組函數對每個組進行數據處理
5.Group by 子句必須出現在where子句之後,order by 子句之前
例:select deptno from emp group by deptno rder by deptno desc

6.having 關鍵字


6.1作用:
用於對分組數據進行過濾
6.2用法:
1.類似於where的用法, Where過濾行,having過濾分組
2.having支持所有where中的操作符
3.一般在使用group by 子句時,應該也給出order by子句

7.Sql語句執行順序(過程):


1. 讀取from子句中的基本表、視圖的數據,[執行笛卡爾積操作]。
2. 選取滿足where子句中給出的條件表達式的元組
3. 按group子句中指定列的值分組,同時提取滿足Having子句中組條件表達式的那些組
4. 按select子句中給出的列名或列表達式求值輸出
5. Order by子句對輸出的目標表進行排序。

註:sql的書寫順序為:
select from where group by having order by [asc/desc]

Oracle數據庫常用SQL函數