函式
- 單行函式:對一行資料進行操作的函式,如字串函式、數值函式、轉換函式、日期函式等,
- 聚合函式:同時對多行資料進行操作,如求和函式等,
字串函式
| 函式 |
說明 |
| ASCII(X) |
求字符X的ASCII碼 |
| CHR(X) |
求ASCII碼對應的字符 |
| LENGTH(X) |
求字串X的字符長度 |
| CONCATA(X,Y) |
連接X和Y兩個字串 |
| INSTR(X,Y[,START]) |
查找在字串X中字串Y的位置,可以指定從Start位置開始搜索,默認從頭開始 |
| LOWER(X) |
把字串中大寫字母轉換為小寫 |
| UPPER(X) |
把字串中小寫字母轉換為大寫 |
| INITCAP(X) |
把字串中所有單詞首字母轉換為大寫,其余小寫 |
| LTRIM(X[,Y]) |
去掉字串X左邊的Y字串,Y不填時,默認的是字串X左邊去空格 |
| RTRIM(X[,Y]) |
去掉字串X右邊的Y字串,Y不填時,默認的是字串X右邊去空格 |
| TRIM(X[,Y]) |
去掉字串X兩邊的Y字串,Y不填時,默認的是字串X左右去空格 |
| REPLACE(X,old,new) |
將字串中的old字符替換為new字符 |
| SUBSTR(X,start[,length]) |
截取字串X,從start位置開始截取長度為length的字串,length不填默認為截取到字串X末尾 |
| RPAD(X,length[,Y]) |
對字串X進行右補字符Y使字串長度達到length長度 |
| LPAD(X,length[,Y]) |
對字串X進行左補字符Y使字串長度達到length長度 |
日期函式
| 函式 |
說明 |
| sysdate() |
系統的當前時間 |
| systimestamp() |
系統的當前時間,包含時區資訊,精確到微秒 |
| dbtimezone() |
回傳資料庫時區 |
| ADD_MONTHS(r,n) |
回傳在指定日期r上加上月份n后的日期,n可以為負數 |
| LAST_DAY(r) |
回傳指定r日期的當前月份的最后一天的日期 |
| NEXT_DAY(r,c) |
回傳指定r日期后的星期幾c對應的日期 |
| EXTRACT(time) |
回傳指定time時間當中的年月日、時分秒等特定部分 |
| MONTHS_BETWEEN(r1,r2) |
回傳兩個日期間的月份數,結果是正數、負數、小數 |
| ROUND(r[,f]) |
將日期r按f的格式進行四舍五入 |
| TRUNC(r[,f]) |
將日期r按f的格式進行截取 |
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
select systimestamp from dual;
select dbtimezone from dual;
-- 結果為 2018-11-30,2018-10-31
select
to_char(add_months(to_date('2018-10-31','yyyy-mm-dd'),1),'yyyy-mm-dd'),
to_char(add_months(to_date('2018-09-30','yyyy-mm-dd'),1),'yyyy-mm-dd')
from dual;
select last_day(sysdate) from dual;
select next_day(to_date('2018-11-12','yyyy-mm-dd'),'星期四') from dual;
select extract(year from timestamp '2018-11-12 15:36:01') as year,
extract(month from timestamp '2018-11-12 15:36:01') as month,
extract(day from timestamp '2018-11-12 15:36:01') as day,
extract(minute from timestamp '2018-11-12 15:36:01') as minute,
extract(second from timestamp '2018-11-12 15:36:01') as second
from dual;
select months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
to_date('2017-11-12', 'yyyy-mm-dd')) as zs, --整數
months_between(to_date('2018-11-12', 'yyyy-mm-dd'),
to_date('2017-10-11', 'yyyy-mm-dd')) as xs, --小數
months_between(to_date('2017-11-12', 'yyyy-mm-dd'),
to_date('2018-10-12', 'yyyy-mm-dd')) as fs --負數
from dual;
select sysdate, --當前時間
round(sysdate, 'yyyy') as year, --按年
round(sysdate, 'mm') as month, --按月
round(sysdate, 'dd') as day, --按天
round(sysdate) as mr_day, --默認不填按天
round(sysdate, 'hh24') as hour --按小時
from dual;
select sysdate, --當前時間
trunc(sysdate, 'yyyy') as year, --按年
trunc(sysdate, 'mm') as month, --按月
trunc(sysdate, 'dd') as day, --按天
trunc(sysdate) as mr_day, --默認不填按天
trunc(sysdate, 'hh24') as hour --按小時
from dual;
數值函式
| 函式 |
解釋 |
| ABS(X) |
求數值X的絕對值 |
| COS(X) |
求數值X的余弦 |
| ACOS(X) |
求數值X的反余弦 |
| CEIL(X) |
向上取整 |
| FLOOR(X) |
向下取整 |
| log(x,y) |
求x為底y的對數 |
| mod(x,y) |
求x除以y的余數 |
| power(x,y) |
求x的y次冪 |
| sqrt(x) |
求x的平方根 |
| round(x[,y]) |
求數值x在y位進行四舍五入,y默認為0,可以為負數 |
| trunc(x[,y]) |
求數值x在y位進行直接截取,y默認為0,可以為負數 |
轉換函式
| 函式 |
解釋 |
| asciistr(x) |
把字串轉換為資料庫字符集對應的ASCII值 |
| bin_to_num(x1[x2...]) |
二進制數值轉換為十進制數值 |
| cast(x as type) |
把x轉換為type型別的資料 |
| convert(x,d_chset[,r_chset]) |
對字串x按原字符集r_chset轉換為目標字符集d_chset |
| to_char(x[,f]) |
把字串或時間型別x按格式f轉換為字串 |
| to_date(x[,f]) |
把字串x按照格式f轉換為時間型別 |
| to_number(x[,f]) |
把字串x按照格式f轉換為數值型別 |
其中數值的格式f可以參考下表:
| 引數 |
示例 |
說明 |
| 9 |
999 |
指定位置回傳數字 |
| . |
99.9 |
指定小數點的位置 |
| , |
99,9 |
指定位置回傳一個逗號 |
| $ |
$99.9 |
指定開頭回傳一個美元符號 |
| EEEE |
9.99EEEE |
指定科學計數法 |
聚合函式
| 函式 |
解釋 |
| AVG([distinct ] expr) |
求列或列組成的運算式expr的平均值 |
| count(*|[distinct]expr) |
計算查詢結果的條數或行數 |
| MAX([distinct] expr) |
指定列或列組成的運算式expr中的最大值 |
| MIN([distinct] expr) |
指定列或列組成的運算式expr中的最小值 |
| SUM([distinct] expr) |
對指定列或列組成的運算式expr進行求和 |
select classno, avg(t.age) from stuinfo t where t.age < 30 group by t.classno;
select classno, sum(age), count(*), sum(age) / count(*), avg(age) from stuinfo t where t.age < 30 group by t.classno;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/11266.html
標籤:Oracle
上一篇:[學習筆記] Oracle集合運算、內連接、外連接、偽列
下一篇:oracle11g ADG staspack安裝檔案