oracle常用函数详解
oracle???數據庫?中主要使用兩種類型的函數:
1.??單行函數:操作一行數據,返回一個結果
常用的單行函數有:
- 數字函數:對數字進行計算,返回一個數字。
- 字符串函數:對字符串操作。
- 日期函數:對日期和時間進行處理。
- 轉換函數:可以將一種數據類型轉換為另外一種數據類型。
2.??聚合函數(多行函數、分組函數、組函數):操作多行數據,并返回一個結果。比如?SUM
一、數字函數
數字函數接受數字參數,參數可以來自表中的一列,也可以是一個數字表達式。
| 函數 | 說明 | 示例 |
| ABS(X) | X的絕對值 | ABS(-3)=3 |
| ACOS(X) | X的反余弦 | ACOS(1)=0 |
| COS(X) | 余弦 | COS(1)=0.54030230586814 |
| CEIL(X) | 向上取整,大于或等于X的最小值 | CEIL(5.4)=6 |
| FLOOR(X) | 向下取整,小于或等于X的最大值 | FLOOR(5.8)=5 |
| LOG(X,Y) | X為底Y的對數 | LOG(2,4)=2 |
| MOD(X,Y) | X除以Y的余數,簡稱取余 | MOD(8,3)=2 |
| POWER(X,Y) | X的Y次冪 | POWER(2,3)=8 |
| ROUND(X[,Y]) | X在第Y位四舍五入 | ROUND(3.456,2)=3.46 |
| SQRT(X) | X的平方根 | SQRT(4)=2 |
| SIGN(n) | 判斷數值正負 | SIGN('9')=1 |
| TRUNC(X[,Y]) | X在第Y位截斷 | TRUNC(3.456,2)=3.45? |
個別說明:
1.??ROUND(X[,Y]),四舍五入。
在缺省?y?時,默認?y=0;比如:ROUND(3.56)=4。
y?是正整數,就是四舍五入到小數點后?y?位。ROUND(5.654,2)=5.65。
y?是負整數,四舍五入到小數點左邊|y|位。ROUND(351.654,-2)=400。
2.??SIGN(n),返回參數n的符號,正數返回1,0返回0,負數返回-1。但如果n為BINARY_FLOAT或BINARY_DOUBLE類型時,n>=0或n=NaN返回1。
3.??TRUNC(x[,y]),直接截取,不四舍五入。
在缺省?y?時,默認?y=0;比如:TRUNC?(3.56)=3。
Y是正整數,就是四舍五入到小數點后?y?位。TRUNC?(5.654,2)=5.65。
y?是負整數,四舍五入到小數點左邊|y|位。TRUNC?(351.654,-2)=300。
?二、字符串函數
字符函數接受字符參數,這些參數可以是表中的列,也可以是一個字符串表達式。
常用的字符函數:
| 函數 | 說明 |
| ASCII(X) | 返回字符X的ASCII碼 |
| CONCAT(X,Y) | 字符串連接函數,連接字符串X和Y |
| INSTR(X,STR[,START][,N]) | 字符串搜索函數,從X中查找str,可以指定從start開始,也可以指定從n開始 |
| INITCAP(X) | 將所有單詞首字母轉為大寫 |
| LENGTH(X) | 返回X的長度 |
| LOWER(X) | 字母轉為小寫函數,X轉換成小寫 |
| UPPER(X) | 字母轉為大寫函數,X轉換成大寫 |
| LPAD(ex1, n[,ex2]) | 字符串填充函數,在字符串ex1左邊用字符串ex2填充,直到長度為n |
| RPAD(ex1, n[,ex2]) | 字符串填充函數,在字符串ex1右邊用字符串ex2填充,直到長度為n |
| LTRIM(X[,TRIM_STR]) | 把X的左邊截去trim_str字符串,缺省截去空格 |
| RTRIM(X[,TRIM_STR]) | 把X的右邊截去trim_str字符串,缺省截去空格 |
| TRIM([TRIM_STR??FROM]X) | 把X的兩邊截去trim_str字符串,缺省截去空格 |
| REPLACE(X,old,new) | 替換字符串函數,在X中查找old,并替換成new |
| SUBSTR(X,start[,length]) | 返回X的字串,從start處開始,截取length個字符,缺省length,默認到結尾 |
上面各函數的例子:
| 示例 | 示例結果 |
| SELECT?ASCII('a')?FROM?dual; | 97 |
| SELECT?CONCAT('Hello','world')?FROM?dual; | Helloworld |
| SELECT?INSTR('Hello?world','or')?FROM?dual; | 8 |
| SELECT?INITCAP('this is a test')?FROM?dual; | This Is A Test |
| SELECT?LENGTH('Hello')?FROM?dual; | 5 |
| SELECT?LOWER('Hello')?FROM?dual; | hello |
| SELECT?UPPER('hello')?FROM?dual; | HELLO |
| SELECT LPAD('test',8,'*reaps')?FROM?dual; | *reatest |
| SELECT?RPAD('test',8,'*reaps')?FROM?dual; | test*rea |
| SELECT?LTRIM('=Hello=','=')?FROM?dual; | Hello= |
| SELECT?RTRIM('=Hello=','=')?FROM?dual; SELECT?RTRIM('=Hello=','=lo')?FROM?dual; (以字符刪除) | =Hello =He |
| SELECT?TRIM('='FROM'=Hello=')?FROM?dual; | Hello |
| SELECT?REPLACE('ABCDE','CD','AAA')FROM?dual; | ABAAAE |
| SELECT?SUBSTR('ABCDE',2,3)?FROM?dual; | BCD |
附SUBSTR函數:
?三、日期函數
| 函數 | 說明 |
| SYSDATE | 得到系統的當前日期,注意不用加() |
| SYSTIMESTAMP | 返回系統時間,注意不用加() |
| ADD_MONTHS(date,int) | 在指定日期上加一個月份數后的日期 |
| LAST_DAY(d) | 返回指定日期當月的最后一天 |
| EXTRACT(fmt?FROM?d) | 提取日期中的特定部分 fmt?為:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中?YEAR、MONTH、DAY可以為?DATE?類型匹配,也可以與?TIMESTAMP?類型匹配;但是?HOUR、MINUTE、SECOND?必須與?TIMESTAMP?類型匹配。 HOUR?匹配的結果中沒有加上時區,因此在中國運行的結果小?8?小時。 |
| ROUND(d[,fmt]) | 返回一個以?fmt?為格式的四舍五入日期值,?d?是日期,?fmt?是格式 模型。默認?fmt?為?DDD,即月中的某一天。 ???① 如果?fmt?為“YEAR”則舍入到某年的?1?月?1?日,即前半年舍去,后半年作為下一年。 ???② 如果?fmt?為“MONTH”則舍入到某月的?1?日,即前月舍去,后半月作為下一月。 ???③ 默認為“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作為第二天。 ???④ 如果?fmt?為“DAY”則舍入到最近的周的周日,即上半周舍去,下半周作為下一周周日。 |
上面各函數的例子:
| 示例 | 示例結果 |
| SELECT?TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS')?FROM?dual; | 2021-07-12 13:23:10 |
| SELECT?SYSTIMESTAMP FROM?dual; | 2021-07-12 13:23:10.292000 +08:00 |
| select to_char(add_months(to_date('2009-9-15','YYYY-MM-DD'), 1), 'YYYY-MM-DD') from dual; | 2009-10-15 |
| SELECT?SYSDATE,last_day(SYSDATE)?FROM?dual; | |
| SELECT?SYSDATE?"date", ???????EXTRACT(YEAR?FROM?SYSDATE)"year", ???????EXTRACT(MONTH?FROM?SYSDATE)"month", ???????EXTRACT(DAY?FROM?SYSDATE)"day", ???????EXTRACT(HOUR?FROM?SYSTIMESTAMP)"hour", ???????EXTRACT(MINUTE?FROM?SYSTIMESTAMP)"minute", ???????EXTRACT(SECOND?FROM?SYSTIMESTAMP)"second" FROM?dual; | 2013/11/5 16:53:58 2013 11 5 8 53 58.190 |
| SELECT?SYSDATE, ????????ROUND(SYSDATE), ????????ROUND(SYSDATE,'day'), ????????ROUND(SYSDATE,'month'), ????????ROUND(SYSDATE,'year')? FROM?dual; | 2013/11/5 16:53:58 2013/11/6 2013/11/3 2013/11/1 2014/1/1 |
四、轉換函數
轉換函數將值從一種數據類型轉換為另外一種數據類型。常見的轉換函數有:
| 函數 | 說明 |
| ASCIISTR(char) | 將字符串轉為對應的ASCII碼字符串 |
| BIN_TO_NUM(data[,data...]) | 二進制轉為十進制 |
| CAST(expr as type) | 數據類型轉換函數,將expr轉為type類型,一般用于數字與字符,字符與日期 |
| TO_CHAR(d|n[,fmt]) | 把日期和數字轉換為制定格式的字符串。Fmt是格式化字符串 |
| TO_DATE(X,[,fmt]) | 字符轉日期型 |
| TO_NUMBER(X,[,fmt]) | 字符串轉數字 |
上面各函數的例子:
| 示例 | 示例結果 |
| SELECT?ASCIISTR('這是測試!')?FROM?dual; | 97 |
| SELECT bin_to_num(1),? ????????bin_to_num(1,1,0), ????????bin_to_num(1,1,1) FROM?dual; | 1 6 7 |
| SELECT?cast('123' as integer)?FROM?dual; | 123 |
| SELECT? ????????TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日"?HH24:MI:SS')"date"? FROM?dual; | |
| SELECT to_date('2019/09/23', 'YYYY-MM-DD')?FROM?dual; | 19-09-23 |
| SELECT?TO_NUMBER('-$12,345.67','$99,999.99')"num"?FROM?dual; |
?五、其它函數
| 函數 | 說明 |
| NVL(X,VALUE) | 如果X為空,返回value,否則返回X |
| NVL2(x,value1,value2) | 如果x非空,返回value1,否則返回value2 |
| decode(條件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值) | 類似: IF 條件=值1 THEN? RETURN(翻譯值1) ELSIF 條件=值2 THEN? RETURN(翻譯值2) ... ELSIF 條件=值n THEN? RETURN(翻譯值n) ELSE RETURN(缺省值) END IF |
上面各函數的例子:
| 示例 | 示例結果 |
| SELECT NVL(NULL,100)?FROM?dual; | 100 |
| SELECT NVL2(1,100,200), ????????NVL2(NULL,100,200) FROM?dual; | 100 200 |
| select t.id, ????????t.name, ????????t.age, ????????decode(t.sex, '1', '男生', '2', '女生', '其他') as sex from STUDENT2 t |
六、聚合函數
聚合函數同時對一組數據進行操作,返回一行結果,比如計算一組數據的總和,平均值
| 名稱 | 作用 | 語法 |
| AVG(X) | 平均值 | AVG(表達式) |
| SUM(X) | 求和 | SUM(表達式) |
| MIN(X)、MAX(X) | 最小值、最大值 | MIN(表達式)、MAX(表達式) |
| COUNT(X) | 數據統計 | COUNT(表達式) |
總結
以上是生活随笔為你收集整理的oracle常用函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重新设定mysql密码~,网上方法都是,
- 下一篇: 《WF编程》系列之3 - 漫游工作流:V