欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle中的常用函數(shù)詳解

 更新時(shí)間:2022年05月05日 14:37:51   作者:springsnow  
本文詳細(xì)講解了Oracle中的常用函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、數(shù)值函數(shù)

1、mod(n1,n2):n1除以n2的余數(shù)。

如果n2為0,則返回n1。

select mod(23,8),mod(24,8) from dual;--返回:7,0

2、power(n1,n2):返回?cái)?shù)字n1的n2次冪; 
exp(y):返回e的y次冪。(e為數(shù)學(xué)常量); 
log(x,y):返回以x為底的y的對(duì)數(shù); 
ln(y):返回e為底的自然對(duì)數(shù)。

select power(2.5,2),power(1.5,0),power(20,-1) from dual;

3、sqrt(n):平方根。

select sqrt(64),sqrt(10) from dual;--返回:8 , 3.16227766

4、ceil(n):返回大于等于n的最小整數(shù)。;

floor(n):返回小于等于n的最大整數(shù)。

select ceil(3.1),ceil(2.8+1.3),ceil(0) from dual;--返回4,5,0

5、sign(x):返回x的正負(fù)值

若為正值返回1,負(fù)值返回-1,0返回0。

select sign(100),sign(-100),sign(0) from dual;

6、trunc(n[,len]):n截取到小數(shù)點(diǎn)len位。

len默認(rèn)為0。len>0,截取到小數(shù)點(diǎn)右len位。len<0,截取到小數(shù)點(diǎn)左len位。

select trunc(5555.66666,2.1),trunc(5555.66666,-2.6),trunc(5555.033333)  from dual;--返回:5555.66  5500   5555

7、round(n[,len]):n四舍五入到小數(shù)點(diǎn)len位,規(guī)則同trunc。

select round(5555.6666,2.1),round(5555.6666,-2.6),round(5555.6666) from dual;--返回:   5555.67  ,5600 ,5556

8、sys.dbms.random.value():產(chǎn)生0-1之間的隨機(jī)數(shù)。

DBMS_RANDOM.VALUE()是隨機(jī)產(chǎn)生( 0,1 )之間的數(shù)。 
DBMS_RANDOM.VALUE(n1,n2):產(chǎn)生n1-n2之間的隨機(jī)數(shù)。

trunc(dbms_random.value(10,100))    //80:生成10-100之間的隨機(jī)數(shù)。

二、字符函數(shù)

1:lower(c1):返回字符串,并將所有的字符小寫

SELECT LOWER('AbcDedf Gbad') FROM DUAL;

2:upper(c1):返回字符串,并將所有的字符大寫

SELECT UPPER('abcdEf') FROM DUAL;

3: initcap(c1):返回字符串并將字符串的第一個(gè)字母變?yōu)榇髮?/strong>

全部單詞的首字母大寫

SELECT INITCAP('your didn''t try your best') FROM DUAL;

4: initcap(c1,n[,c2]):在列的左邊填充字符

  • C1 字符串
  • n 追加后字符總長(zhǎng)度
  • c2 追加字符串,默認(rèn)為空格
SELECT LPAD('WELCOME', 20, 'HELLO') FROM DUAL;

5: rpad(c1,n[,c2]):在列的右邊填充字符

注意長(zhǎng)度值并不是粘貼字符的長(zhǎng)度,而是整個(gè)字符串的長(zhǎng)度,如果長(zhǎng)度小于原始字符串

--SELECT RPAD('HELLO', 4, '*') FROM DUAL; 的值為HELL
SELECT RPAD('HELLO', 10, '*') FROM DUAL;
SELECT RPAD('HELLO', 10, 'E') FROM DUAL;

6: ltrim(X,[TRIM_STRING]):刪除左邊出現(xiàn)的字符串。

默認(rèn)為空字符串

SELECT LTRIM('  hello world!') FROM DUAL;
SELECT LTRIM('hello, world', 'hello') FROM DUAL;

7: rtrim(X, [TRIM_STRING]):刪除右邊出現(xiàn)的字符串

TRIM_STRING,默認(rèn)為空字符串。

SELECT RTRIM('hello world!    ') FROM DUAL;

8: trim('s' from 'string'):刪除兩邊出現(xiàn)的字符串

LEADING 剪掉前面的字符 
TRAILING 剪掉后面的字符 
如果不指定,默認(rèn)為空格符

SELECT TRIM('Y' FROM 'YOU') FROM DUAL;

9: instr(C1,C2,I,J):在一個(gè)字符串中搜索指定的字符,返回發(fā)現(xiàn)指定的字符的位置;

  • C1 被搜索的字符串
  • C2 希望搜索的字符串
  • I 搜索的開始位置,默認(rèn)為1
  • J 出現(xiàn)的位置,默認(rèn)為1
SELECT INSTR('HELLO WORLD! WELCOME', 'WORLD', 1)  FROM DUAL;

10:substr(string,start,count):取子字符串,從start開始,取count個(gè)

SELECT SUBSTR('you are right!, come on', 3, 30) FROM DUAL;

11:replace('string','s1','s2'):替換

  • string 希望被替換的字符或變量
  • s1 被替換的字符串
  • s2 要替換的字符串
SELECT REPLACE('HE LOVE YOU', 'HE' ,'I') FROM DUAL;

12:translate(c1,c2,c3):將指定字符替換為新字符

  • c1 希望被替換的字符或變量
  • c2 查詢?cè)嫉淖址?/li>
  • c3: 替換新的字符集,將c2對(duì)應(yīng)順序字符,替換為c3對(duì)應(yīng)順序字符
select TRANSLATE('he love you','he','i'),
TRANSLATE('重慶的人','重慶的','上海男'),
TRANSLATE('重慶的人','重慶的重慶','北京男士們'),
TRANSLATE('重慶的人','重慶的重慶','1北京男士們'),
TRANSLATE('重慶的人','1重慶的重慶','北京男士們') from dual;
--i love you,上海男人,北京男人,1北京人,京男士人

13: length(c1):返回字符串的長(zhǎng)度;

返回表某條數(shù)據(jù)某個(gè)列實(shí)際長(zhǎng)度,如果該表沒有數(shù)據(jù),返回0

SELECT LENGTH(TYPE_NAME) FROM USER_TYPES

14:ascii(x1):返回字符串的ASCII值

SELECT ASCII('A') FROM DUAL;
SELECT ASCII('a') FROM DUAL;

15: chr(n1):返回整數(shù)所對(duì)應(yīng)的ASCII字符

SELECT CHR('65') FROM DUAL;
SELECT CHR(400) FROM DUAL;  --如果超出ACII值,則返回空

16: concat(c1,c2):連接字符串A和字符串B

SELECT CONCAT('您好', '歡迎來(lái)到ORACLE世界') AS TEXT FROM DUAL;
--如果要連接表里面的兩個(gè)字段可以用||
SELECT TYPECODE || '____' || TYPE_NAME AS "TYPE" FROM USER_TYPES;

三、日期時(shí)間函數(shù)

1:sysdate、current_date:系統(tǒng)的當(dāng)前日期

(1)日期加上范圍日期,得到新日期

  • data+n,加減n天。(n為負(fù)數(shù),表示減去)
  • date+n/24:加減n小時(shí)
  • date+n/24/60:加減n分鐘
  • date+n/24/60/3600:加減n秒

(2)date1-date2:兩日期相差的天數(shù):

(date1-date2)*24*3600:兩日期相差的秒數(shù)

SELECT SYSDATE FROM DUAL;

2:add_months(date,n1):增加或減去月份

SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20080818','YYYYMMDD'),2), 'YYYY-MM-DD') FROM DUAL;
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL

3: months_between(date2,date1):給出date2-date1的月份

SELECT MONTHS_BETWEEN(TO_DATE('2011-05-03', 'YYYY-MM-DD'), TO_DATE('2011-01-23', 'YYYY-MM-DD')) FROM DUAL;
SELECT MONTHS_BETWEEN('19-12月-1999','19-3月-1999') mon_between FROM DUAL;
--SELECT MONTHS_BETWEEN('2011-1月-23', '2011-9月-1') FROM DUAL;  文字與格式字符串不匹配

4: last_day(date):返回日期的最后一天

SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT LAST_DAY(ADD_MONTHS(SYSDATE, -2)) FROM DUAL;

5:next_day(date[,fmt]):返回日期d1在下周,星期幾(參數(shù)c1)的日期

星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7

SELECT NEXT_DAY(SYSDATE, 2) FROM DUAL;--下周星期一,

6、round(date[,fmt]):日期時(shí)間四舍五入結(jié)果。

fmt默認(rèn)是day.

7: trunc(date[,fmt]):TRUNC函數(shù)為指定元素而截去的日期值。

TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am') ='24-Nov-1999 12:00:00 am'
TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh') ='24-Nov-1999 08:00:00 am'

8:extract(c1 from date) :找出日期或間隔值的字段值

SELECT EXTRACT(MONTH FROM SYSDATE) "MONTH" FROM DUAL;
SELECT EXTRACT(DAY FROM SYSDATE)  AS "DAY" FROM DUAL;
SELECT EXTRACT(YEAR FROM SYSDATE) AS "YEAR" FROM DUAL;

9:new_time(date,'this','that'):給出在this時(shí)區(qū)=other時(shí)區(qū)的日期和時(shí)間

SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD HH24:MI:SS') BeiJing_Time,TO_CHAR(NEW_TIME(SYSDATE, 'PDT', 'GMT'), 'YYYY.MM.DD HH24:MI:SS') LOS_ANGELS FROM DUAL;

簡(jiǎn)寫 時(shí)區(qū)

  • AST OR ADT 大西洋標(biāo)準(zhǔn)時(shí)間
  • HST OR HDT 阿拉斯加—夏威夷時(shí)間
  • BST OR BDT 英國(guó)夏令時(shí)
  • MST OR MDT 美國(guó)山區(qū)時(shí)間
  • CST OR CDT 美國(guó)中央時(shí)區(qū)
  • NST 新大陸標(biāo)準(zhǔn)時(shí)間
  • EST OR EDT 美國(guó)東部時(shí)間
  • PST OR PDT 太平洋標(biāo)準(zhǔn)時(shí)間
  • GMT 格倫威治標(biāo)準(zhǔn)時(shí)間
  • YST OR YDT Yukon標(biāo)準(zhǔn)時(shí)間

10: dbtimezone() :返回時(shí)區(qū)

SELECT DBTIMEZONE FROM DUAL;

11: sessiontimezone:返回會(huì)話時(shí)區(qū)

其中DBTIMEZONE是數(shù)據(jù)庫(kù)的,session是針對(duì)當(dāng)前會(huì)話的,因?yàn)闀r(shí)區(qū)在會(huì)話級(jí)可以改變

SELECT SESSIONTIMEZONE FROM DUAL;  
ALTER SESSION SET TIME_ZONE = '8:00';
SELECT SESSIONTIMEZONE FROM DUAL;

12、常用時(shí)間查詢:

----  上月最后一天
SELECT TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE, -1)), 'YYYY/MM/DD') FROM DUAL;
----: 上各月的今天
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'YYYY-MM-DD') FROM DUAL;
---- 上個(gè)月第一天
SELECT TO_CHAR(ADD_MONTHS(LAST_DAY(SYSDATE)+1,-2),'YYYY-MM-DD') FirstDay FROM DUAL;
---  要找到某月中所有周五的具體日期 
SELECT TO_CHAR(T.D, 'YY-MM-DD')
FROM (SELECT TRUNC(SYSDATE, 'MM') + ROWNUM -1 AS D FROM DBA_OBJECTS WHERE ROWNUM < 32) T
WHERE TO_CHAR(T.D, 'MM') = TO_CHAR(SYSDATE, 'MM') AND TRIM(TO_CHAR(T.D, 'DAY')) = '星期五'

四、轉(zhuǎn)換函數(shù)

1: to_char(date,'format') :把對(duì)應(yīng)的數(shù)據(jù)轉(zhuǎn)換為字符串類型

TO_CHAR的fmt:格式字符串,不分大小寫。

select to_char(sysdate,'yyyy-mm-dd hh24:mi;ss') from dual
  • Y或YY或YYY 年的最后一位,兩位或三位
  • SYEAR或YEAR: SYEAR使公元前的年份前加一負(fù)號(hào) --TWENTY ELEVEN
  • Q: 季度,1~3月為第一季度 -- 2表示第二季度
  • MM: 月份數(shù) --04表示4月
  • RM: 月份的羅馬表示 --IV表示4月
  • MON: 月份 --4月
  • Month: 用9個(gè)字符長(zhǎng)度表示的月份名 -- 4月
  • WW: 當(dāng)年第幾周 -- 24表示2002年6月13日為第24周
  • W: 本月第幾周 -- 2011年04月26日為第4周
  • DDD: 當(dāng)年第幾天. 1月1日為001,2月1日為032
  • DD: 當(dāng)月第幾天
  • D: 周內(nèi)第幾天
  • DY: 周內(nèi)第幾天縮寫
  • HH或HH12: 12進(jìn)制小時(shí)數(shù)
  • HH24: 24小時(shí)制
  • MI: 分鐘數(shù)(0~59) :提示注意不要將MM格式用于分鐘(分鐘應(yīng)該使用MI)。MM是用于月份的格式,將它用于分鐘也能工作,但結(jié)果是錯(cuò)誤的。
  • SS: 秒數(shù)(0~59)
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;

2: to_char(n,'format'):把對(duì)應(yīng)的數(shù)字為字符串類型

FORMAT格式符:

  • 9:帶有指定位數(shù)的值
  • 0:前導(dǎo)零的值
  • . (句點(diǎn)):小數(shù)點(diǎn)
  • , (逗號(hào)):分組(千)分隔符
  • PR:尖括號(hào)內(nèi)負(fù)值
  • S:帶負(fù)號(hào)的負(fù)值(使用本地化)
  • L:貨幣符號(hào)(使用本地化)
  • D:小數(shù)點(diǎn)(使用本地化)
  • G:分組分隔符(使用本地化)
  • MI:在指明的位置的負(fù)號(hào)(如果數(shù)字 < 0)
  • PL:在指明的位置的正號(hào)(如果數(shù)字 > 0)
  • SG:在指明的位置的正/負(fù)號(hào)
  • RN:羅馬數(shù)字(輸入在 1 和 3999 之間)
  • TH or th:轉(zhuǎn)換成序數(shù)
SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;

3: to_date(string,'format'):將字符串轉(zhuǎn)化為日期

主要用于比較和修改日期。

SELECT TO_DATE('2011/03/24', 'YYYY-MM-DD') FROM DUAL;

4: to_number:將給出的字符轉(zhuǎn)換為數(shù)字

SELECT TO_NUMBER('¥2008.00','L9999D99') AS Year FROM DUAL;

五、輔助函數(shù)

1、decode(條件,值1,翻譯值1,值2,翻譯值2,...值n,翻譯值n,缺省值):根據(jù)條件返回相應(yīng)值

值1……n 不能為條件表達(dá)式,這種情況只能用case when then end解決。

select decode(xqn,1,'星期一',2,'星期二',3,'星期三','星期三以后') 星期FROM xqb

2、greatest(exp1,exp2,exp3,……,expn):返回表達(dá)式列表中值最大的一個(gè)。 ; least(exp1,exp2,exp3,……,expn):返回表達(dá)式列表中值最小的一個(gè)。

如果表達(dá)式類型不同,會(huì)隱含轉(zhuǎn)換為第一個(gè)表達(dá)式類型。

SELECT greatest(10,32,'123','2006') FROM dual;

3、nullif (expr1, expr2):expr1和expr2相等返回NULL,不相等返回expr1。

SELECT NULLIF( 'a', 'b' ) ;--返回值 a
SELECT NULLIF( 'a', 'a');--返回 NULL

實(shí)際應(yīng)用:

--添加函數(shù)查詢結(jié)果,要求(將日期類型默認(rèn)'0001/1/1',改成null,不相等,返回本身日期)--
select NULLIF(RECEIVEDATE,TO_DATE('0001/1/1','yyyy-mm-dd hh24:mi:ss')) 收貨日期,NAME 單據(jù)名稱 from tab

4、nvl (expr1, expr2):若expr1為NULL,返回expr2;expr1不為NULL,返回expr1。

select NVL(null,'未知') SexType from dual;--expr1為空,返回expr2,結(jié)果:'未知'
select NVL('1','2') SexType from dual;--expr1不為空,返回expr1, 結(jié)果:1

實(shí)際應(yīng)用:

--加函數(shù)時(shí)情況,要求(field 為null,返回0 ;field 不為null,返回本身
select NVL(UseFlag,'0') 使用標(biāo)志,NAME 單據(jù)名稱 from tab

5、nvl2(expr1, expr2, expr3) :expr1不為NULL,返回expr2;expr2為NULL,返回expr3。

expr2和expr3類型不同的話,expr3會(huì)轉(zhuǎn)換為expr2的類型

select NVL2(0,1,2) from dual;--不為null時(shí),返回expr2 ,結(jié)果:1
select NVL2(null,1,2) from dual;--為null時(shí),返回expr3 ,結(jié)果:2

實(shí)際應(yīng)用:

--應(yīng)用到實(shí)際查詢中,要求(field 為null,返回0; field 不為null,返回本身)
 select NVL2(UseFlag,UseFlag,'0') 使用標(biāo)志,A.NAME 單據(jù)名稱 from tab

6、coalesce(c1, c2, ...,cn):返回列表中第一個(gè)非空的表達(dá)式,如果所有表達(dá)式都為空值則返回1個(gè)空值。

select COALESCE(null,3*5,44) hz from dual; --返回15

7、sys_context('USERENV',c2):返回系統(tǒng)'USERENV'變量中c2對(duì)應(yīng)的的值。

SYS_CONTEXT('USERENV','LANGUAGE') language,

8、sys_connect_by_path(column_name,'分隔符'):把一個(gè)父節(jié)點(diǎn)下的所有子節(jié)點(diǎn)通過(guò)某個(gè)字符進(jìn)行區(qū)分,然后連接在一個(gè)列中顯示

詳見 Oracle遞歸查詢connect by

  • 第一個(gè)參數(shù)是形成樹形式的字段,第二個(gè)參數(shù)是父級(jí)和其子級(jí)分隔顯示用的分隔符
  • 偽列CONNECT_BY_ROOT,CONNECT_BY_LEAF,CONNECT_BY_ISCYCLE

結(jié)構(gòu)化查詢:START WITH ...CONNNECT BY PRIOR基本語(yǔ)法是:

SELECT ...FROM
WHERE (過(guò)濾返回記錄,僅過(guò)濾被限定節(jié)點(diǎn),其根節(jié)點(diǎn)和子節(jié)點(diǎn)均不受影響)
START WITH (根節(jié)點(diǎn),可以指定多個(gè)節(jié)點(diǎn))
CONNECT BY PRIOR= (連接條件,PRIOR置于等號(hào)前,則從根節(jié)點(diǎn)到葉節(jié)點(diǎn)開始檢索;置于等號(hào)后,則從葉節(jié)點(diǎn)到根節(jié)點(diǎn)開始檢索)

該查詢?cè)L問(wèn)路徑如下:從根節(jié)點(diǎn)開始,向下掃描子節(jié)點(diǎn),該子節(jié)點(diǎn)已被訪問(wèn)則轉(zhuǎn)向其最左側(cè)未被訪問(wèn)的子節(jié)點(diǎn),否則判斷該節(jié)點(diǎn)是否為根節(jié)點(diǎn),是則訪問(wèn)完畢,否則返回父節(jié)點(diǎn)重新執(zhí)行判斷。

SELECT ename   FROM scott.emp    START WITH ename = 'KING'    CONNECT BY PRIOR empno = mgr;

--得到結(jié)果為:

KING 
JONES 
SCOTT 
ADAMS 
FORD 
SMITH 
BLAKE 
ALLEN 
WARD 
MARTIN 
TURNER 
JAMES

SELECT SYS_CONNECT_BY_PATH(ename, </'>') "Path"    FROM scott.emp    START WITH ename = 'KING'    CONNECT BY PRIOR empno = mgr;

--得到結(jié)果為:

KING 
KING>JONES 
KING>JONES>SCOTT 
KING>JONES>SCOTT>ADAMS 
KING>JONES>FORD 
KING>JONES>FORD>SMITH 
KING>BLAKE 
KING>BLAKE>ALLEN 
KING>BLAKE>WARD 
KING>BLAKE>MARTIN 
KING>BLAKE>TURNER 
KING>BLAKE>JAMES 
KING>CLARK 
KING>CLARK>MILLER 

六、聚合函數(shù)

  • AVG(DISTINCT|ALL):平均值,DISTINCT表示對(duì)不同的值求平均值,重復(fù)值的列的只取一次。
SELECT AVG(DISTINCT SAL) FROM SCOTT.EMP;
  • MAX(DISTINCT|ALL):最大值
  • MIN(DISTINCT|ALL):最小值
  • SUM(DISTINCT|ALL):求和
  • COUNT(DISTINCT|ALL):求記錄數(shù)
  • wmsys.wm_concat(DISTINCT|ALL):合并列。 
    將一列的多行記錄合并到一列,用逗號(hào)隔開。例如表的有兩個(gè)字段,要按airport_id合并成兩行可用sql語(yǔ)句
select airport_id,   wmsys.wm_concat(distinct  account) from AIRPORT_MODIFY group by airport_id

七、分析函數(shù)

見專題:Oracle分析函數(shù)

到此這篇關(guān)于Oracle常用函數(shù)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論