Oracle常用函數(shù)整理
點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,
之前已經(jīng)給小伙伴們整理了SQL Server和Mysql的常用函數(shù),還沒有看的可以戳下面的鏈接:
今天再給大家分享一下Oracle的常用函數(shù)。
1、字符函數(shù)
字符函數(shù)接受字符參數(shù),這些參數(shù)可以是表中的列,也可以是一個字符串表達式。常用的字符函數(shù):
ASCII(X)?????????--返回字符X的ASCII碼???????????????? --如:ASCII('A')?結(jié)果:65CONCAT(X,Y)??????--連接字符串X和Y ?--如:CONCAT('SQL','數(shù)據(jù)庫開發(fā)') 結(jié)果:SQL數(shù)據(jù)庫開發(fā)CHR(X)???????????--返回X所指代的字符???如:CHR(65) 結(jié)果:AINITCAP(X)???????--返回X每個單詞首字母大寫的格式?????????????????? --如 INITCAP('hello world')?結(jié)果:Hello WorldINSTR(X,STR[,START[,N]])???????????????????--從X中查找str,并返回它出現(xiàn)的位置,可以指定從start開始,也可以指定從n開始?????????????????--如:INSTR('ABCDABCD','AB',4,1) 結(jié)果:5LENGTH(X)????????--返回X的長度??如:LENGTH('ABC') 結(jié)果:3LOWER(X)???????? --X轉(zhuǎn)換成小寫UPPER(X)???????? --X轉(zhuǎ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字符串?????????????????--如:REPLACE('ABCDABCD','AB','X') 結(jié)果:XCDXCDSUBSTR(X,start[,length])?????????????????--返回X的字串,從start處開始,截取length個字符,缺省length,默認到結(jié)尾?????????????????--如:SUBSTR('ABCDEFGH',3,5) 結(jié)果:CDEFG
(提示:可以左右滑動代碼)
2、數(shù)字函數(shù)
數(shù)字函數(shù)接受數(shù)字參數(shù),參數(shù)可以來自表中的一列,也可以是一個數(shù)字表達式。
ABS(X) --X的絕對值ACOS(X) --X的反余弦COS(X)???????????--X的余弦CEIL(X) --大于或等于X的最小值FLOOR(X) --小于或等于X的最大值LOG(X,Y) --X為底Y的對數(shù)MOD(X,Y) --X除以Y的余數(shù)POWER(X,Y) --X的Y次冪ROUND(X[,Y]) --X在第Y位四舍五入SQRT(X) --X的平方根TRUNC(X[,Y]) --X在第Y位截斷說明:a. ROUND(X[,Y]),四舍五入。在缺省 y 時,默認 y=0;比如:ROUND(3.56)=4。y 是正整數(shù),就是四舍五入到小數(shù)點后 y 位。ROUND(5.654,2)=5.65。y 是負整數(shù),四舍五入到小數(shù)點左邊|y|位。ROUND(351.654,-2)=400。b. TRUNC(x[,y]),直接截取,不四舍五入。在缺省 y 時,默認 y=0;比如:TRUNC (3.56)=3。Y是正整數(shù),就是四舍五入到小數(shù)點后 y 位。TRUNC (5.654,2)=5.65。y 是負整數(shù),四舍五入到小數(shù)點左邊|y|位。TRUNC (351.654,-2)=300。
3、日期函數(shù)
日期函數(shù)對日期進行運算。常用的日期函數(shù)有:
ADD_MONTHS(d,n) --在某一個日期 d 上,加上指定的月數(shù) n,返回計算后的新日期。--d 表示日期,n 表示要加的月數(shù)。CURRENT_DATE???????? --返回當前日期,包含時間部分LAST_DAY(d)?????????? --返回指定日期當月的最后一天。MONTHS_BETWEEN(d1,d2)?--返回日期d1月d2之間的相差的月數(shù)NEXT_DAY(date,char) --從日期參數(shù)中返回char參數(shù)所指定 下一天??????????????????????--如:NEXT_DAY(DATE'2020-6-27', '星期二')?結(jié)果:2020/6/30ROUND(d[,fmt])??????? --返回一個以 fmt 為格式的四舍五入日期值, d 是日期, fmt 是格式模型。--默認 fmt 為 DDD,即月中的某一天。1、如果 fmt 為“YEAR”則舍入到某年的 1 月 1 日,即前半年舍去,后半年作為下一年。2、如果 fmt 為“MONTH”則舍入到某月的 1 日,即前月舍去,后半月作為下一月。3、默認為“DDD”,即月中的某一天,最靠近的天,前半天舍去,后半天作為第二天。4、如果 fmt 為“DAY”則舍入到最近的周的周日,即上半周舍去,下半周作為下一周周日。例如SELECT SYSDATE,ROUND(SYSDATE),ROUND(SYSDATE,'day'),ROUND(SYSDATE,'month'),ROUND(SYSDATE,'year') FROM dual;與 ROUND 對應(yīng)的函數(shù)時 TRUNC(d[,fmt])對日期的操作, TRUNC 與 ROUND 非常相似,只是不對日期進行舍入,直接截取到對應(yīng)格式的第一天。EXTRACT(fmt FROM d) --提取日期中的特定部分。fmt 為:YEAR、MONTH、DAY、HOUR、MINUTE、SECOND。其中 YEAR、MONTH、DAY可以為 DATE 類型匹配,也可以與 TIMESTAMP 類型匹配;但是 HOUR、MINUTE、SECOND 必須與 TIMESTAMP 類型匹配。HOUR 匹配的結(jié)果中沒有加上時區(qū),因此在中國運行的結(jié)果小 8 小時。例: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;
4、轉(zhuǎn)換函數(shù)
轉(zhuǎn)換函數(shù)將值從一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型。常見的轉(zhuǎn)換函數(shù)有:
TO_CHAR(d|n[,fmt]) --把日期和數(shù)字轉(zhuǎn)換為制定格式的字符串。Fmt是格式化字符串例如:SELECT TO_CHAR(SYSDATE,'YYYY"年"MM"月"DD"日" HH24:MI:SS') "date" FROM dual;代碼解析:在格式化字符串中,使用雙引號對非格式化字符進行引用針對數(shù)字的格式化,格式化字符有:9 --指定位置處顯示數(shù)字.??????--指定位置返回小數(shù)點, --指定位置返回一個逗號$ --數(shù)字開頭返回一個美元符號EEEE --科學(xué)計數(shù)法表示L --數(shù)字前加一個本地貨幣符號PR?????--如果數(shù)字式負數(shù)則用尖括號進行表示?TO_DATE(X [,fmt]) --把一個字符串以fmt格式轉(zhuǎn)換成一個日期類型TO_NUMBER(X [,fmt])????? --把一個字符串以fmt格式轉(zhuǎn)換為一個數(shù)字
5、聚合函數(shù)
統(tǒng)計函數(shù)(聚合函數(shù))
AVG() --求平均值COUNT() --統(tǒng)計數(shù)目MAX() --求最大值MIN() --求最小值SUM() --求和
6、分析函數(shù)
分析函數(shù)語法function_name(<argument>,<argument>...) over(<partition_Clause><order by_Clause>);function_name():函數(shù)名稱argument:參數(shù)over(?):開窗函數(shù)partition_Clause:分區(qū)子句,數(shù)據(jù)記錄集分組,partition by...order by_Clause:排序子句,數(shù)據(jù)記錄集排序,order by...COUNT()?OVER() --統(tǒng)計分區(qū)中各組的行數(shù),partition?by?可選,order?by?可選SUM() OVER() --統(tǒng)計分區(qū)中記錄的總和,partition by 可選,order by 可選AVG() OVER() --統(tǒng)計分區(qū)中記錄的平均值,partition by 可選,order by 可選MIN() OVER() --統(tǒng)計分區(qū)中記錄的最小值,partition by 可選,order by 可選MAX()?OVER()? --統(tǒng)計分區(qū)中記錄的最大值,partition?by?可選,order?by?可選RANK()?OVER()???--跳躍排序,partition?by?可選,order?by?必選DENSE_RANK() OVER() --連續(xù)排序,partition by 可選,order by 必選ROW_NUMBER() OVER() --排序,無重復(fù)值,partition by 可選,order by 必選NTILE(n)?OVER()? --partition?by?可選,order?by?必選????n表示將分區(qū)內(nèi)記錄平均分成n份,多出的按照順序依次分給前面的組FIRST_VALUE() OVER() --取出分區(qū)中第一條記錄的字段值,partition by 可選,order by 可選LAST_VALUE()?OVER()? --取出分區(qū)中最后一條記錄的字段值,partition?by?可選,order?by?可選LAG()?OVER()? --取出前n行數(shù)據(jù),partition?by?可選,order?by?必選LEAD()?OVER()? --取出后n行數(shù)據(jù),partition?by?可選,order?by?必選PERCENT_RANK()?OVER()??--partition?by?可選,order?by?必選所在組排名序號-1除以該組所有的行數(shù)-1,排名跳躍排序
7、其他函數(shù)
NVL(X,VALUE) --如果X為空,返回value,否則返回XNVL2(x,value1,value2)????--如果x非空,返回value1,否則返回value2

我是岳哥,最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》和《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。
有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。
推薦閱讀
后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨
后臺回復(fù)關(guān)鍵字:進群,帶你進入高手如云的交流群。
推薦閱讀
