函數 單行函數:對一行數據進行操作的函數,如字元串函數、數值函數、轉換函數、日期函數等。 聚合函數:同時對多行數據進行操作,如求和函數等。 字元串函數 | 函數 | 說明 | | | | | ASCII(X) | 求字元X的ASCII碼 | | CHR(X) | 求ASCII碼對應的字元 | | L ...
函數
- 單行函數:對一行數據進行操作的函數,如字元串函數、數值函數、轉換函數、日期函數等。
- 聚合函數:同時對多行數據進行操作,如求和函數等。
字元串函數
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;