pl/sql函数学习
生活随笔
收集整理的這篇文章主要介紹了
pl/sql函数学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
7種函數的詳細介紹及用法:
1、錯誤報告(error reporting)函數
?? sqlcode?? 返回oracle錯誤號
?? sqlerrm?? 返回oracle錯誤信息
主要用於異常處理
? declare
? err_num number;
? err_msg varchar2(100);
? begin
? ...
? exception
? ...
? when others then
? /*當引發異常的時候,將SQLERRM和SQLCODE值取出,插入表ERRORS中*/
? err_num:=sqlcode;
? err_msg:=substr(sqlerrm,1,100);
? insert into errors(errnum,errmsg) values(err_num,err_msg);
? end;
2、數值(Number)函數
?? abs? 返回絕對值
?? acos 返回以弧度為單位的反余弦值
?? asin 返回以弧度為單位的反正弦值
?? atan(m) 返回m的反正切值(以弧度為單位),即返回arctan(m)
?? atan2(m,n) 返回m與n的反正切值即返回aretan(m/n)
?? bitand 位與函數,即按位相與
?? ceil 返回大於等於特定值的最小整數
?? cos? 返回以弧度為單位的余弦值
?? cosh 返回以弧度為單位的雙曲余弦值
?? exp? 求e的x方(e=2.71828,如 exp(3)=e的3次方)
?? floor 返回小於等於特定值的最大整數
?? ln??? 返回自然對數
?? log(x,y) 返回以x為底的y的對數
?? mod(x,y) 返回x除以y的余數
?? power(x,y) 返回x的y次方
?? round? 返回四捨五入的值
?? sign(x) 根據x的值決定返回1、0或-1(x>0,返回1;x=0,返回0;x<0,返回-1)
?? sin? 返回以弧度為單位的正弦值
?? sinh 返回以弧度為單位的雙曲正弦值
?? sqrt(x)? 返回x的平方根
?? tan? 返回以弧度為單位的正切值
?? tanh? 返回以弧度為單位的雙曲正切值
?? trunc(x,y) 返回剪裁到指定位置y後x的值(y可不寫默認為0,將x裁剪為整數)
****DUAL表: 是oracle工作表,是一個行和一個列的標準表,它被用做一個
???????????? 虛擬表。要展示oracle內置函數的功能時,用到此表
1 bitand: select order_id,customer_id,decode(bitand(order_status,1),1,
????????? 'warehouse','postoffice') location;
2 ceil: select ceil(-7.38) from dual; -7
3 floor: select floor(-7.38) from dual; -8
4 sign: select sign(-23) from dual; -1
5 round: select round(123.456),round(123.789,-1),round(456.123,1) from dual;
???????? 注:其結果是四捨五入到保留指定位
6 trunc: select trunc(456.325,1),trunc(753.256,-1),trunc(5240.45) from dual;
???????? 注:其結果是保留到指定位但不執行四捨五入
3、字符(char)函數:下面為ORACLE中所有的字符函數。
??
? ASCII 返回指定字符的ASCII碼
? CHR? 返回指定的ASCII碼的字符和ASCII函數互為反函數
? CONCAT 連接兩個指定的字符(‘與“||”操作符作用相同)
? INITCAP 返回拽定的字符中,該字符串每一個單詞的第一個字母為大寫,其他均為小寫,
????????? 不影響不是字母的字符串。
? INSTR(X,Y[,Z]) 返回Y在X中的位置,如沒有則為0,如有Z則從Z開始找到的Y在X中的位置,與SUBSTR(X,Y[,Z])相似。
? INSTRB(X,Y) 返回Y在X中位置,如沒有則為0,對於單字節字符系統,返回的值以字節為單位
? LENGTH(X) 返回以字節為單位的X的長度,包括填充的字符,如果值是未知的,則返回NULL;
? LENGTHB(x) 作用同LENGTH(X),對於單字節字符系統,返回值以字節為單位。
? LOWER? 將特定的字符串化為小寫,不影響不是字母的字符串
? LPAD(X,I,Y) 用字符串Y按指定的填充I填充X字符串的左邊。
? LTRIM(X,Y)? 裁剪字符串和Y中字符相同的X左邊的字符。
? RTRIM(X,Y)? 裁剪字符串和Y中字符相同的X右邊的字符。
? ~~NLS_INITCAP 與INITCAP函數相同,它可以使用NLSSORT指定的分類方法。
? ~~NLS_LOWER? 與LOWER函數相同,它可以使用NLSSORT指定的分類方法。
? ~~NLS_UPPER? 與UPPER函數相同,它可以使用NLSSORT指定的分類方法。
??? NLSSORT(string) 返回用於排序string的字符串字節。
? REPLACE(X,Y,Z) 用Z字符串取代X字符串中的Y字符串。
? RPAD(X,I,Y) 用字符串Y按指定的填充數I填充X字符串的右邊。
? LPAD(X,I,Y) 用字符串Y按指定的填充婁I填充X字符串的左邊。
? SPIMDEX 返回字符串的語音表示。
? SUBSTRB 同SUBSTR,以字節婁而百字符數返回字符串的一部分。
? TRIM? 裁剪字符串兩邊的字符,是LTRIM和RTRIM兩個函數的組合。
? TRUNSLATE? 同REPLACE,作用於字符基礎上而非字符串基礎上。
? UPPER 將整個字符串轉換成大寫,不對非字母字符串產生作用。
祥解字符函數:
? 1 CONCAT? : SELECT CONCAT('MY','ORACLE') "ORACLE" FROM DUAL;
? 2 LPAD??? : SELECT LPAD('THIS IS MY ORACLE',10,'XY') FROM DUAL;
????????????? 結果是 THIS IS MY
????????????? SELECT LPAD('THIS IS MY ORACLE',20,'XY') FROM DUAL;
????????????? 結果是 XYXTHIS IS MY ORACLE
????????????? SELECT LPAD('THIS IS MY ORACLE',18,'XY') ORACLE FROM DUAL;
????????????? 結果是 XTHIS IS MY ORACLE
3 LTRIM??? : SELECT LTRIM('XXBBBBZZZZYXYXMYBOOK','XB') FROM DUAL;
????????????? 結果是 ZZZZYXYXMYBOOK
4 NLS_INITCAP : SELECT NLS_INITACP('jdfhkj','NLS_SORT=Xdutch') result from dual;
???????????????? 結果是 Jdfhkj
5 NLS_LOUER: SELECT NLS_LOWER('JKJKJK','NLS_SORT=Xgerman') "result" from dual;
????????????? 結果是 jkjkjk
6 NLS_UPPER: SELECT NLS_UPPER('jkjkjk','NLS_SORT=Xgerman') "result" from dual;
????????????? 結果是 JKJKJK
7 INSTR? : SELECT INSTR('AABBABCAB','AB') "result" from dual;
??????????? 結果是 2
??????????? SELECT INSTR('AABBASCAB','AB',4) "result" from dual;
??????????? 結果是 8
8 NLSSORT: SELECT NLSSORT ('MYORACLE_函數123') FROM DUAL;
??????????? 結果是 4D794F524C434C455FBAAFCAFD31323300返回用於排序string字符串字節。
9 REPLACE : SELECT REPLACE('this is that','is','are') "result" from dual;
???????????? 結果是 thare are that
???????????? SELECT REPLACE('this is that','is','are') "result" from dual;
???????????? 結果是 th? that
10 SOUNDEX: SELECT SOUNDEX('SCOTT') ONE,SOUND('SKIT') TWO FROM DUAL;
???????????? 結果是 IST? SET
??????????????????? ---- -----
??????????????????? S300? S300
11 SUBSTR : SELECT SUBSTR('MYBOOKISORACLE','3,8) "RESULT" FROM DUAL;
???????????? 結果是Result
?????????????????? ------
?????????????????? BOOKISOR
???????????? SELECT SUBSTR('MybookIsOracle',-6,8) "Result" from dual;
???????????? 結果是result
????????????????? --------
?????????????????? Oracle
???????????? SELECT SUBSTR('MYBOOKISORACLE',6) "RESULT" FROM DUAL;
???????????? 結果是result
????????????????? --------
????????????????? KISORACLE
12 TRANSLATE : SELECT TRANSLATE('ABCMYORACLEABC','ABC','**') "RESULT" FROM DUAL;
?????????????? 結果是result
??????????????????? --------
????????????????? **myoracle**
??????????????
** 13 TRIM : SELECT TRIM('A' FROM 'AAMYORACLEAA') "RESULT" FROM DUAL;
?????????? 結果是 result
???????????????? ----------
????????????????? MYORACLE
4、轉換 (Conversion) 函數
?? CHARTOROWID: 將包含外部格式的ROWID的CHAR或VARCHAR2數值轉換為內部的二進制格式
CONVERT : 從一個字符集轉換到另一個字符集
HEXTORAW: 從十六進制字符串值轉換為內部的原始值
ROWTOHEX: 將內部的原始值轉換為十六進制字符串值
ROWIDTOCHAR: 將ROW ID轉換為其外部的18-字節字符串表示
TO_BLOB : 將指定的值轉換為BLOB類型的值
TO_CHAR: 將DATE、MLSLABLE和NUMBER強制轉換為VARCHAR2字符串
TO_CLOB: 將指定的值轉換為CLOB類型的值
TO_DATE: 將CHAR或VARCHAR2字符串強制轉換為日期值
TO_LABEL : 將CHAR或varchar2字符串強制轉換為MLSABEL
?? TO_MULTI_BYTE: 將任何單字節字符串轉換為多字節字符串
TO_NUMBER: 將CHAR或VARCHAR2字符串強制轉換為NUMBER值
TO_SINGLE_BYTE: 將任何多字節字符串轉換為單字節字符串
常用字符集:
?? US7ASCII: U.S7位ASCII字符集。這是大多數Unix操作系統和運行於Unix上的Oracle數據庫所采用的字符集
WE8DEC: DEC西歐8位字符集
WE8HP:??? HP西歐LaserJet8位字符集
F7DEC:??? DEC法語7位字符集
WE8EBCDIC500 : IBM西歐EBCDIC Code Page 500字符集
WE8PC850 : IBM PC Code Page 500 字符集,這是大多數PC系統和運行於PC上的Oracle數據庫所采用的字符集
WE8ISO8859P1: ISO_8859-1西歐8位字符集
TO_CHAR的四種轉換情況:
1 TO_CHAR(DATE[,FORMAT[NLSPARAMS]])
?
1> 將日期期轉換為字符型
AD、A.D. AD 指示符。可帶句點也可不帶句點。
AM、A.M.? 午前指示符。可帶句點也可不帶句點。
BC、B.C.? BC指示符。可帶句點也可不帶句點。
CC、C.C.? 世紀。SCC作為負數返回BC日期。(century:世紀)
*日期格式元素與描述:
D 一周中的星期幾,用1-7表示,(星期天為1)
DAY? 天的全稱。使用空格填充9個字符,大小寫敏感。
? DD?? 月中的第幾天(1-31)
????? DDD? 年中的第幾天(1-366)
????? DY?? 天名稱的簡寫。大小寫敏感
????? FX?? 在數據元素語格式之間采用準確的匹配模式。
????? FM?? 填充模式。確定在輸出格式中是否用空格填充。
????? HH、HH12? 一天中的時間(1-12)
????? HH24 一天中的時間(1-24)
????? IW?? 返回根據ISO標準的年中的第幾周(1-52、1-53)
????? IYY、IY、I? 返回ISO年中最後三、二、一位數據。
????? IYYY? 返回ISO年中標準的四位數。
????? J??? Julian日,從公元前4712年1月1日起到指定日期的天數。
????? MI?? 分(1-59),表時間
????? MM?? 月(1-12)
????? MONTH? 月份的名稱。使用空格填充9個字符。大小寫敏感。
????? MON??? 月份名稱的簡寫,大小寫敏感。
????? PM、P.M. 午後的指示符。
????? Q??? 一年中的季度(1-4)
????? RM?? 農驪數字中的月份(I_XII)
????? RR?? 世紀中年份的最後兩位數字。
????? SS?? 秒(0-59)
????? SSSS 從午前開始過去的秒數。(0-86399)
????? WW?? 一年中的第幾個星期(1-53)
????? W??? 該月中的第幾個星期(1-5)
????? Y,YYY 年份,用逗號進行分位。
????? YYYY,SYYYY 四位的年份。SYYYY將BC日期作為負數返回。
????? YEAR、SYEAR 年份的名字,SYEAR將BC日期作為負數返回,大小寫敏感
????? YYY、YY、Y 年份的最後三、二、一位數。
????? 停頓(Punctuation): 在結果字符串中產生所有必須的停頓間隔符。
???? “文本”: 在雙引號中的文本被重新產生出來。
????? SELECT TO_CHAR(SYSDATE,'A.D.YYYY"年"-MONTH-DD"日"-DAY') "Reault" from dual;
????? result
????? -------
????? 公元2001年-10月-12日-星期五
2> TO_CHAR(NUMBER[,FORMAT[,NLSPARAMS]])
? *數字格式元素:
????
????? 9 如9999 :???? 每一個9表示一個有效位,轉換值的有效位應和9的各位相同,如要轉換的
????????????????????? 是負數則應有前導的負號,前導如為0則視為空格。
????? 0 如0999或9990? 返回不包括空格的前導可後繼0。
????? $ 如$999 :???? 返回帶有前導貨幣符號的數值。
????? B 如B999 :???? 當整數為0時,將該小數的整數部分填充為空格。
????? MI如99MI :???? 該值如為負數,則加後繼負號,如非負數則加一後繼占位符。
????? S 如S999或999S? S在前,為數據加前導+或-號、S在後,為數據加後繼+或-號。
????? PR 如999PR:???? 如為負值,用尖括號括起,如為正值,則前導後繼各加一空格。
????? D 如99D99:???? 返回小數點的位置,兩邊的9指定了最大位數。
????? G 如99G99:???? 返回千分位分隔符,G可出現多次
????? C 如C999:?????? 在指定的位置上返回本地貨幣號。
????? L 如L999:????? 在指定位置上返回本地貨幣號
????? , 如99,99:??? 在指定的位置返回一個逗號,而不管指定的千分位分隔符。
????? . 如99.99 :??? 在指定的位置返回一個小數點,而不管指定的小數點分隔符。
????? V 如99V99:???? 返回與10的n次方相乘的值,n是V後面9的個數。
????? EEEE 如9.99EEEE : 以科學計數法返回值。
????? RM,rm如RM.rm:?? 用大寫(RM)或小寫(rm)的羅馬數字返回指定的數字。
??
??? *
????? NLS_NUMERIC_CHARACTERS:可簡寫為'NLS_NUMBER_CHARS'.其表示的意思是指定分
????????????????????????????? 組分隔符和小數點使用的字符。
????? NLS_CURRENCY:指定Oracle默認的貨幣。
????? NLS_ISO_CURRENCY:? 指定ISO貨幣符號的字符。
??? 例子:? SELECT TO_CHAR(123456789,'L999G999G999D99','NLS_CURRENCY=¥') "RESULT" FROM DUAL;
???? 結果是RESULT
???? ?????? --------
????????????????? ¥123,456,789.00
TO_CHAR的另外兩種轉換情況:?
? 3> TO_CHAR(label[,format])? :它用於將MLSLABEL類型的label值轉換為一個VARCHAR2類型的值。
??? 4>? TO_CHAR(character):它用於將NCHAR、NVARCHAR2、CLOB或NCLOB轉換成數據庫能夠認識的字符類型。
2、TO_CLOB 將給定的NCLOB值轉換成LOB字段或將別的字符串轉換成CLOB值
3、TO_DATE(STRING[,FORMAT[,NLSPARAMS]])函數將CHAR或VARCHAR2類型的值轉換為一個DATE類型的值。
('NLS_DATE_LANGUAGE=language'指定返回日期所使用的語言。)
select to_Date('1999 july 21','yyyy-mm-dd','nls_date_language=english') "result" from dual;
?? result
?? ------
?? 21-7月-99
?? select to_date('20010809','yyyy-mm-dd') "result" from dual;
?? result
? -------
?? 09-8月-01
4、TO_MULTI_BYTE: 函數將string中所有的單字節字符轉換為等價的多字節字符。只當數據庫字符集中同時包
???????????????? 含單字節和多字節時才有用,否則string不會進行任何處理而返回
?? select to_multi_byte('myoracle') "result" from dual;
?? result
?? ------
?? myoracle
5、TO_SINGLE_BYTE(STRING) :函數將string中有的多字節字符轉換成單字節字符。和TO_MULTI_BYTE互為反函數。
select to_single_byte('myoracle9i') "result" from dual;
?? result
?? --------
?? myoracle9i
6、TO_NUMBER(STRING[,FORMAT[,NLSPARAMS]]):函數將CHAR或VARCHAR2類型的STRING轉換成NUMBER類型的數值。
?? select to_number('$1234.56','$9999.99') "result" from dual;
?? result
?? ------
?? 1234.56
6.5日期(Date)函數
?? add_months???????? 給指定的日期加上若干個月。
current_date?????? 返回當前會話期時區內的日期。
current_timestamp? 返回當前會話期時區內的日期和時間。
dbtimezone???????? 返回當前數據庫所在時區。
extract??????????? 從時間參數中取出並返回指定的時間字段。
from_tz??????????? 將一個含有時區的TEMESTAMP的值轉換成TIMESTAMP WITH TIME ZONE值。
last_day?????????? 返回給定月份的最後一天。
localtimestamp???? 以timestamp數據形式返回當前會話期時區內的日期和時間。
?? months_between???? 返回兩個日期之間的月份。
new_time?????????? 返回根據用戶指定的時區計算相應的時間/天數值。
next_day 返回指定日期後的下一個星期幾的日期。
numtodsinterval??? 將指定的值轉換成INTERVAL DAY TO SECOND 類型。
numtoyminterval??? 將指定的值轉換成INTERVAL YEAR TO MONTH 類型。
round????????????? 按指定的日期參數(年、月、日)四捨五入指定的日期。
sessiontimezone??? 返回當前會話期的時區。
sysdate??????????? 返回系統當前的日期和時間。
?? systimestamp?????? 以timestamp with time zone 類型返回系統日期。
?? to_dsinterval????? 將指定的字符串轉換成INTERVAL DAY TO SECOND類型。
to_timestamp?????? 將指定的字符串轉換成TIMESTAMP類型。
?? to_timestamp_tz??? 將指定的字符串轉換成TIMESTAMP WITH TIME ZONE類型。
?? to_yminterval????? 將指定的字符串轉換成INTERVAL YEAR TO MONTH類型。
tz_lffset????????? 根據指定的值返回相應的時區偏移量。
trunc 按指定的日期參數(年、月、日)剪裁指定的日期。
1、sysdate函數
select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') "now" from dual;
?? now
?? -------------------
?? 2001-10-14,09:02:09
2、add_months(date,x)函數
?? select add_months(to_date('2001-01-30','yyyy-mm-dd'),1) "first" from dual;
?? first
? --------
?? 28-2月-01
3、current_date函數
alter session set time_zone='-5:0';
?? alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
?? select sessiontimezone,current_date from dual;
?? sessintimezone???? current_date
?? --------------???? ------------
?? -05:0016-10月-2001 21:16:09
4、current_timestamp函數
alter session set time_zone='-5:0';
?? alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
?? select sessiontimezone,current_timestamp from dual;
?? sessiontimezone? current_timestamp
?? ---------------? -----------------------------
?? -05:00 16-10月-2001 21:26:04.715620 p.m. -5:00
5、dbtimezone函數
?? select dbtimezone from dual;
?? dbtime
?? -------
?? +08:00
6、extract函數
?? select extract(year from date'1998-03-07') from dual;
?? extract(year from date'1998-03-07')
?? -----------------------------------
?? 1998
7、from_tz函數
select from_tz(timestamp'2000-03-28 08:00:00','3:00') from dual;
?? from_tz(timestamp'2000-03-28 08:00:00','3:00)
?? -----------------------------------------------
?? 28-3月-00 08:00:00 am +03:00
8、localtimestamp函數
alter session set time_zone='-5:00';
?? select current_timestamp,localtimestamp from dual;
?? current_timestamp localtimestamp
?? ---------------------------------------------------------
?? 04-apr-00 01:27:18.999220 pm -05:00 04-aor-00 01:27:19 pm??
9、months_between函數
select months_between('18-10月-01','18-10月-01') "first"
?? months_between('18-10月-01','19-4月-01') "second' from dual;
?
?? first??? second
?? -------? ----------
?? -6 ? 5.96774194
10、NEW_TIME函數 : 將ZONE1時區的日期DATE轉換成ZON2時區的日期。
AST?? 大西洋標準時間
ADT 大西洋夏令時
??? BST 白令標準時
BDT 白令夏令時
CST?? 中部夏令時
??? EDT?? 東部夏令時
? EST?? 東部標準時
GMT?? 格林尼治標準時
HST?? 阿拉斯加-夏威夷標準時
HDT 阿拉斯加-夏威夷夏令時
MST?? 山地標準時
??? MDT?? 山地夏令時
NST?? 紐芬蘭標準時
PST?? 太平洋標準時
PDT 太平洋夏令時
??? YST?? 育空標準時
??? YDT?? 育空夏令時
select to_char(new_time(sysdate,'pst','gmt'),'yyyy-mm-dd,hh:mi:ss') "result" from dual;
??? result
??? -------------------
??? 2001-10-14,06:28:10
11、NEXT_DAY函數
select next_day(sysdate,'星期五') from dual;
??? next_day(sysda
??? ----------------
??? 19-10月-01
12、NUMTODSINTERVAL(N,'CHAR_EXPR') 函數將指定的N轉換成INTERVAL DAY GO SECOND類型。
select numtodsinterval(100,'hour') from dual;
??? numtodsinterval(100,'hour')
??? --------------------------------
??? +000000004 04:00:00.000000000
13、NUMTOMINTERVAL(N,'CHAR_EXPR')函數將指定的值N轉換成INTERVAL YEAR TO MONTH類型。
select numtoyminterval(100,'month') from dual;
??? numtoyminterval(100,'month')
??? ------------------------------
??? +0.000000008-04
14、ROUND(DATE,[,FORMAT])函數 將指定的值N轉換成INTERVAL YEAR TO MINTH 類型。
select round(to_date('12-6月-01'),'mm') "first"
??? round(to_date('18-6月-01'),'mm') "second" from dual;
??? first???? second
??? -------?? --------
??? 01-6月-01 01-7月-01
15、SESSIONTIMEZONE函數返回當前會話期的時區
select sessiontimezone from dual;
??? session
??? ---------
??? +08:00
16、SYSTIMESTAMP函數:以TIMESTAMP WITH TIME ZONE 類型返回當前系統日期。
select systimestamp from dual;
??? systimestamp
??? -------------
??? 28-10月-01 12.38.55.538741 pm +8:00
17、TO_DSIONTERVAL(CHAR[,NLSPARAM])函數將指定的字符串 轉換成INTERVAL DAY TO SECOND類型。
select employee_id, alst_name from hr.employees
??? where hire_date-to_dsinterval('100 10:00:00')
??? >date '1985-01-01';
18、TO_TIMESTAMP函數將指定的字符串轉換成TIMESTAMP類型
select to_timestamp('1999-12-01 11:00:00','yyyy-mm-dd hh:mi:ss') "first" from dual;
???
??? first
??? ---------
??? 01-DEC-99 11.00.00.000000000 AM
19、TO_TIMESTAMP_TZ(char,[fmt[,nlsparam]])函數將指定的字符串轉換成TIMEST AMP WITH TIME ZONE 類型。
20、TO_YMINTERVAL(char)函數將指定的字符串轉換成INTERVAL YEAR TO MONTH類型。
21、TZ_OFFSET函數
select tz_offset('us/eastern') from dual;
???
??? tz_offs
??? ----------
??? -4:00
22、TRUNC(DATE[,FORMAT])函數將日期DATE按照FORMAT指定的格式進行截取,缺省為'DD',截取日期為當月第一天。
SELECT TRUNC(TO_DATE('12-6月-01'),'MM') "FIRST"
??? TRUNC(TO_DATE('18-6月-01'),'MM') "SECOND" FROM DUAL;
??
??? FIRST???? SECOND
??? -------?? ----------
??? 01-6月-01?? 01-6月-01
?
??? select to_char(sysdate,'yyyy-mm-dd hh:mi:ss am') "result1",
??? to_char(trunc(sysdate),'yyyy-mm-dd hh:mi:ss am') "result2" from dual;
?
??? result1???????????????????????? result2
??? ----------????????????????????? --------------
??? 2001-10-21 02:48:49 下午??????? 2001-10-21 12:00:00 上午
6.6分組(GROUP) 函數
AVG????? 求返回的各列的平均值
COUNT??? 返回查詢的行的數目
GLB????? 返回MSLABLE的最大下界
LUB????? 返回MSLABEL的最小上界
MAX????? 返回查詢列中的最大值
STDDEV?? 返回查詢列的平均偏差
?? SUM????? 返回查詢列的總和
VARIANCE 返回查詢列的統計方差
1、STDDEV函數
select stddev(mgr) from scott.emp;
?
???? stddev(mgr)
???? ------------
???? 103.71466
? 2、VARIANGE([DISTINCTIALL] column)函數查詢列的統計方差
?? select variange(mgr) from scott.emp
???
???? variance(mgr)
???? --------------
???? 10756.7308
6.7雜項(Misc)函數
BILENAME??? 返回一個BFILE位置指示符,指向一個存儲實際的LOB二進制文件的存儲文件
DECODE????? 類似於IF_THEN_ELSE語句
? DUMP??????? 返回有關指定數值的內部表示信息VARCHAR2類型的數值。
EMPTY_BLOB? 返回一個空的二進制指示符
??? EMPTY_CLOB? 返回一個空的字符指示符
??? GREATEST??? 返回給定的參數列表中最大的表達式
??? LEAST?????? 返回給定的參數列表中最小的表達式
NLS_CHARSET_DECL_LEN? 返回NCHAR列的定義長度(以字符長度表示)
? NLS_CHARSET_ID??????? 返回與NLS字符集名稱關聯的NLS集ID號
NLS_CHARSET_NAME????? 返回傳遞給函數的ID關聯的NLS字符名稱
??? NVL?????????????????? 從給定的表達式中選擇第一個不為空的值
SYS_CONTEXT?????????? 返回當前進程的屬性
SYS_GUID ? 產生和返回一個16字節的全局的惟一的標志符(ROW)值
? UID?????????????????? 返回ORACLE中用戶的ID號
USER????????????????? 返回當前用戶名稱
USERENV?????????????? 返回當前工作環境的信息
??? VSIZE???????????????? 返回指定值的內部字節數
1、錯誤報告(error reporting)函數
?? sqlcode?? 返回oracle錯誤號
?? sqlerrm?? 返回oracle錯誤信息
主要用於異常處理
? declare
? err_num number;
? err_msg varchar2(100);
? begin
? ...
? exception
? ...
? when others then
? /*當引發異常的時候,將SQLERRM和SQLCODE值取出,插入表ERRORS中*/
? err_num:=sqlcode;
? err_msg:=substr(sqlerrm,1,100);
? insert into errors(errnum,errmsg) values(err_num,err_msg);
? end;
2、數值(Number)函數
?? abs? 返回絕對值
?? acos 返回以弧度為單位的反余弦值
?? asin 返回以弧度為單位的反正弦值
?? atan(m) 返回m的反正切值(以弧度為單位),即返回arctan(m)
?? atan2(m,n) 返回m與n的反正切值即返回aretan(m/n)
?? bitand 位與函數,即按位相與
?? ceil 返回大於等於特定值的最小整數
?? cos? 返回以弧度為單位的余弦值
?? cosh 返回以弧度為單位的雙曲余弦值
?? exp? 求e的x方(e=2.71828,如 exp(3)=e的3次方)
?? floor 返回小於等於特定值的最大整數
?? ln??? 返回自然對數
?? log(x,y) 返回以x為底的y的對數
?? mod(x,y) 返回x除以y的余數
?? power(x,y) 返回x的y次方
?? round? 返回四捨五入的值
?? sign(x) 根據x的值決定返回1、0或-1(x>0,返回1;x=0,返回0;x<0,返回-1)
?? sin? 返回以弧度為單位的正弦值
?? sinh 返回以弧度為單位的雙曲正弦值
?? sqrt(x)? 返回x的平方根
?? tan? 返回以弧度為單位的正切值
?? tanh? 返回以弧度為單位的雙曲正切值
?? trunc(x,y) 返回剪裁到指定位置y後x的值(y可不寫默認為0,將x裁剪為整數)
****DUAL表: 是oracle工作表,是一個行和一個列的標準表,它被用做一個
???????????? 虛擬表。要展示oracle內置函數的功能時,用到此表
1 bitand: select order_id,customer_id,decode(bitand(order_status,1),1,
????????? 'warehouse','postoffice') location;
2 ceil: select ceil(-7.38) from dual; -7
3 floor: select floor(-7.38) from dual; -8
4 sign: select sign(-23) from dual; -1
5 round: select round(123.456),round(123.789,-1),round(456.123,1) from dual;
???????? 注:其結果是四捨五入到保留指定位
6 trunc: select trunc(456.325,1),trunc(753.256,-1),trunc(5240.45) from dual;
???????? 注:其結果是保留到指定位但不執行四捨五入
3、字符(char)函數:下面為ORACLE中所有的字符函數。
??
? ASCII 返回指定字符的ASCII碼
? CHR? 返回指定的ASCII碼的字符和ASCII函數互為反函數
? CONCAT 連接兩個指定的字符(‘與“||”操作符作用相同)
? INITCAP 返回拽定的字符中,該字符串每一個單詞的第一個字母為大寫,其他均為小寫,
????????? 不影響不是字母的字符串。
? INSTR(X,Y[,Z]) 返回Y在X中的位置,如沒有則為0,如有Z則從Z開始找到的Y在X中的位置,與SUBSTR(X,Y[,Z])相似。
? INSTRB(X,Y) 返回Y在X中位置,如沒有則為0,對於單字節字符系統,返回的值以字節為單位
? LENGTH(X) 返回以字節為單位的X的長度,包括填充的字符,如果值是未知的,則返回NULL;
? LENGTHB(x) 作用同LENGTH(X),對於單字節字符系統,返回值以字節為單位。
? LOWER? 將特定的字符串化為小寫,不影響不是字母的字符串
? LPAD(X,I,Y) 用字符串Y按指定的填充I填充X字符串的左邊。
? LTRIM(X,Y)? 裁剪字符串和Y中字符相同的X左邊的字符。
? RTRIM(X,Y)? 裁剪字符串和Y中字符相同的X右邊的字符。
? ~~NLS_INITCAP 與INITCAP函數相同,它可以使用NLSSORT指定的分類方法。
? ~~NLS_LOWER? 與LOWER函數相同,它可以使用NLSSORT指定的分類方法。
? ~~NLS_UPPER? 與UPPER函數相同,它可以使用NLSSORT指定的分類方法。
??? NLSSORT(string) 返回用於排序string的字符串字節。
? REPLACE(X,Y,Z) 用Z字符串取代X字符串中的Y字符串。
? RPAD(X,I,Y) 用字符串Y按指定的填充數I填充X字符串的右邊。
? LPAD(X,I,Y) 用字符串Y按指定的填充婁I填充X字符串的左邊。
? SPIMDEX 返回字符串的語音表示。
? SUBSTRB 同SUBSTR,以字節婁而百字符數返回字符串的一部分。
? TRIM? 裁剪字符串兩邊的字符,是LTRIM和RTRIM兩個函數的組合。
? TRUNSLATE? 同REPLACE,作用於字符基礎上而非字符串基礎上。
? UPPER 將整個字符串轉換成大寫,不對非字母字符串產生作用。
祥解字符函數:
? 1 CONCAT? : SELECT CONCAT('MY','ORACLE') "ORACLE" FROM DUAL;
? 2 LPAD??? : SELECT LPAD('THIS IS MY ORACLE',10,'XY') FROM DUAL;
????????????? 結果是 THIS IS MY
????????????? SELECT LPAD('THIS IS MY ORACLE',20,'XY') FROM DUAL;
????????????? 結果是 XYXTHIS IS MY ORACLE
????????????? SELECT LPAD('THIS IS MY ORACLE',18,'XY') ORACLE FROM DUAL;
????????????? 結果是 XTHIS IS MY ORACLE
3 LTRIM??? : SELECT LTRIM('XXBBBBZZZZYXYXMYBOOK','XB') FROM DUAL;
????????????? 結果是 ZZZZYXYXMYBOOK
4 NLS_INITCAP : SELECT NLS_INITACP('jdfhkj','NLS_SORT=Xdutch') result from dual;
???????????????? 結果是 Jdfhkj
5 NLS_LOUER: SELECT NLS_LOWER('JKJKJK','NLS_SORT=Xgerman') "result" from dual;
????????????? 結果是 jkjkjk
6 NLS_UPPER: SELECT NLS_UPPER('jkjkjk','NLS_SORT=Xgerman') "result" from dual;
????????????? 結果是 JKJKJK
7 INSTR? : SELECT INSTR('AABBABCAB','AB') "result" from dual;
??????????? 結果是 2
??????????? SELECT INSTR('AABBASCAB','AB',4) "result" from dual;
??????????? 結果是 8
8 NLSSORT: SELECT NLSSORT ('MYORACLE_函數123') FROM DUAL;
??????????? 結果是 4D794F524C434C455FBAAFCAFD31323300返回用於排序string字符串字節。
9 REPLACE : SELECT REPLACE('this is that','is','are') "result" from dual;
???????????? 結果是 thare are that
???????????? SELECT REPLACE('this is that','is','are') "result" from dual;
???????????? 結果是 th? that
10 SOUNDEX: SELECT SOUNDEX('SCOTT') ONE,SOUND('SKIT') TWO FROM DUAL;
???????????? 結果是 IST? SET
??????????????????? ---- -----
??????????????????? S300? S300
11 SUBSTR : SELECT SUBSTR('MYBOOKISORACLE','3,8) "RESULT" FROM DUAL;
???????????? 結果是Result
?????????????????? ------
?????????????????? BOOKISOR
???????????? SELECT SUBSTR('MybookIsOracle',-6,8) "Result" from dual;
???????????? 結果是result
????????????????? --------
?????????????????? Oracle
???????????? SELECT SUBSTR('MYBOOKISORACLE',6) "RESULT" FROM DUAL;
???????????? 結果是result
????????????????? --------
????????????????? KISORACLE
12 TRANSLATE : SELECT TRANSLATE('ABCMYORACLEABC','ABC','**') "RESULT" FROM DUAL;
?????????????? 結果是result
??????????????????? --------
????????????????? **myoracle**
??????????????
** 13 TRIM : SELECT TRIM('A' FROM 'AAMYORACLEAA') "RESULT" FROM DUAL;
?????????? 結果是 result
???????????????? ----------
????????????????? MYORACLE
4、轉換 (Conversion) 函數
?? CHARTOROWID: 將包含外部格式的ROWID的CHAR或VARCHAR2數值轉換為內部的二進制格式
CONVERT : 從一個字符集轉換到另一個字符集
HEXTORAW: 從十六進制字符串值轉換為內部的原始值
ROWTOHEX: 將內部的原始值轉換為十六進制字符串值
ROWIDTOCHAR: 將ROW ID轉換為其外部的18-字節字符串表示
TO_BLOB : 將指定的值轉換為BLOB類型的值
TO_CHAR: 將DATE、MLSLABLE和NUMBER強制轉換為VARCHAR2字符串
TO_CLOB: 將指定的值轉換為CLOB類型的值
TO_DATE: 將CHAR或VARCHAR2字符串強制轉換為日期值
TO_LABEL : 將CHAR或varchar2字符串強制轉換為MLSABEL
?? TO_MULTI_BYTE: 將任何單字節字符串轉換為多字節字符串
TO_NUMBER: 將CHAR或VARCHAR2字符串強制轉換為NUMBER值
TO_SINGLE_BYTE: 將任何多字節字符串轉換為單字節字符串
常用字符集:
?? US7ASCII: U.S7位ASCII字符集。這是大多數Unix操作系統和運行於Unix上的Oracle數據庫所采用的字符集
WE8DEC: DEC西歐8位字符集
WE8HP:??? HP西歐LaserJet8位字符集
F7DEC:??? DEC法語7位字符集
WE8EBCDIC500 : IBM西歐EBCDIC Code Page 500字符集
WE8PC850 : IBM PC Code Page 500 字符集,這是大多數PC系統和運行於PC上的Oracle數據庫所采用的字符集
WE8ISO8859P1: ISO_8859-1西歐8位字符集
TO_CHAR的四種轉換情況:
1 TO_CHAR(DATE[,FORMAT[NLSPARAMS]])
?
1> 將日期期轉換為字符型
AD、A.D. AD 指示符。可帶句點也可不帶句點。
AM、A.M.? 午前指示符。可帶句點也可不帶句點。
BC、B.C.? BC指示符。可帶句點也可不帶句點。
CC、C.C.? 世紀。SCC作為負數返回BC日期。(century:世紀)
*日期格式元素與描述:
D 一周中的星期幾,用1-7表示,(星期天為1)
DAY? 天的全稱。使用空格填充9個字符,大小寫敏感。
? DD?? 月中的第幾天(1-31)
????? DDD? 年中的第幾天(1-366)
????? DY?? 天名稱的簡寫。大小寫敏感
????? FX?? 在數據元素語格式之間采用準確的匹配模式。
????? FM?? 填充模式。確定在輸出格式中是否用空格填充。
????? HH、HH12? 一天中的時間(1-12)
????? HH24 一天中的時間(1-24)
????? IW?? 返回根據ISO標準的年中的第幾周(1-52、1-53)
????? IYY、IY、I? 返回ISO年中最後三、二、一位數據。
????? IYYY? 返回ISO年中標準的四位數。
????? J??? Julian日,從公元前4712年1月1日起到指定日期的天數。
????? MI?? 分(1-59),表時間
????? MM?? 月(1-12)
????? MONTH? 月份的名稱。使用空格填充9個字符。大小寫敏感。
????? MON??? 月份名稱的簡寫,大小寫敏感。
????? PM、P.M. 午後的指示符。
????? Q??? 一年中的季度(1-4)
????? RM?? 農驪數字中的月份(I_XII)
????? RR?? 世紀中年份的最後兩位數字。
????? SS?? 秒(0-59)
????? SSSS 從午前開始過去的秒數。(0-86399)
????? WW?? 一年中的第幾個星期(1-53)
????? W??? 該月中的第幾個星期(1-5)
????? Y,YYY 年份,用逗號進行分位。
????? YYYY,SYYYY 四位的年份。SYYYY將BC日期作為負數返回。
????? YEAR、SYEAR 年份的名字,SYEAR將BC日期作為負數返回,大小寫敏感
????? YYY、YY、Y 年份的最後三、二、一位數。
????? 停頓(Punctuation): 在結果字符串中產生所有必須的停頓間隔符。
???? “文本”: 在雙引號中的文本被重新產生出來。
????? SELECT TO_CHAR(SYSDATE,'A.D.YYYY"年"-MONTH-DD"日"-DAY') "Reault" from dual;
????? result
????? -------
????? 公元2001年-10月-12日-星期五
2> TO_CHAR(NUMBER[,FORMAT[,NLSPARAMS]])
? *數字格式元素:
????
????? 9 如9999 :???? 每一個9表示一個有效位,轉換值的有效位應和9的各位相同,如要轉換的
????????????????????? 是負數則應有前導的負號,前導如為0則視為空格。
????? 0 如0999或9990? 返回不包括空格的前導可後繼0。
????? $ 如$999 :???? 返回帶有前導貨幣符號的數值。
????? B 如B999 :???? 當整數為0時,將該小數的整數部分填充為空格。
????? MI如99MI :???? 該值如為負數,則加後繼負號,如非負數則加一後繼占位符。
????? S 如S999或999S? S在前,為數據加前導+或-號、S在後,為數據加後繼+或-號。
????? PR 如999PR:???? 如為負值,用尖括號括起,如為正值,則前導後繼各加一空格。
????? D 如99D99:???? 返回小數點的位置,兩邊的9指定了最大位數。
????? G 如99G99:???? 返回千分位分隔符,G可出現多次
????? C 如C999:?????? 在指定的位置上返回本地貨幣號。
????? L 如L999:????? 在指定位置上返回本地貨幣號
????? , 如99,99:??? 在指定的位置返回一個逗號,而不管指定的千分位分隔符。
????? . 如99.99 :??? 在指定的位置返回一個小數點,而不管指定的小數點分隔符。
????? V 如99V99:???? 返回與10的n次方相乘的值,n是V後面9的個數。
????? EEEE 如9.99EEEE : 以科學計數法返回值。
????? RM,rm如RM.rm:?? 用大寫(RM)或小寫(rm)的羅馬數字返回指定的數字。
??
??? *
????? NLS_NUMERIC_CHARACTERS:可簡寫為'NLS_NUMBER_CHARS'.其表示的意思是指定分
????????????????????????????? 組分隔符和小數點使用的字符。
????? NLS_CURRENCY:指定Oracle默認的貨幣。
????? NLS_ISO_CURRENCY:? 指定ISO貨幣符號的字符。
??? 例子:? SELECT TO_CHAR(123456789,'L999G999G999D99','NLS_CURRENCY=¥') "RESULT" FROM DUAL;
???? 結果是RESULT
???? ?????? --------
????????????????? ¥123,456,789.00
TO_CHAR的另外兩種轉換情況:?
? 3> TO_CHAR(label[,format])? :它用於將MLSLABEL類型的label值轉換為一個VARCHAR2類型的值。
??? 4>? TO_CHAR(character):它用於將NCHAR、NVARCHAR2、CLOB或NCLOB轉換成數據庫能夠認識的字符類型。
2、TO_CLOB 將給定的NCLOB值轉換成LOB字段或將別的字符串轉換成CLOB值
3、TO_DATE(STRING[,FORMAT[,NLSPARAMS]])函數將CHAR或VARCHAR2類型的值轉換為一個DATE類型的值。
('NLS_DATE_LANGUAGE=language'指定返回日期所使用的語言。)
select to_Date('1999 july 21','yyyy-mm-dd','nls_date_language=english') "result" from dual;
?? result
?? ------
?? 21-7月-99
?? select to_date('20010809','yyyy-mm-dd') "result" from dual;
?? result
? -------
?? 09-8月-01
4、TO_MULTI_BYTE: 函數將string中所有的單字節字符轉換為等價的多字節字符。只當數據庫字符集中同時包
???????????????? 含單字節和多字節時才有用,否則string不會進行任何處理而返回
?? select to_multi_byte('myoracle') "result" from dual;
?? result
?? ------
?? myoracle
5、TO_SINGLE_BYTE(STRING) :函數將string中有的多字節字符轉換成單字節字符。和TO_MULTI_BYTE互為反函數。
select to_single_byte('myoracle9i') "result" from dual;
?? result
?? --------
?? myoracle9i
6、TO_NUMBER(STRING[,FORMAT[,NLSPARAMS]]):函數將CHAR或VARCHAR2類型的STRING轉換成NUMBER類型的數值。
?? select to_number('$1234.56','$9999.99') "result" from dual;
?? result
?? ------
?? 1234.56
6.5日期(Date)函數
?? add_months???????? 給指定的日期加上若干個月。
current_date?????? 返回當前會話期時區內的日期。
current_timestamp? 返回當前會話期時區內的日期和時間。
dbtimezone???????? 返回當前數據庫所在時區。
extract??????????? 從時間參數中取出並返回指定的時間字段。
from_tz??????????? 將一個含有時區的TEMESTAMP的值轉換成TIMESTAMP WITH TIME ZONE值。
last_day?????????? 返回給定月份的最後一天。
localtimestamp???? 以timestamp數據形式返回當前會話期時區內的日期和時間。
?? months_between???? 返回兩個日期之間的月份。
new_time?????????? 返回根據用戶指定的時區計算相應的時間/天數值。
next_day 返回指定日期後的下一個星期幾的日期。
numtodsinterval??? 將指定的值轉換成INTERVAL DAY TO SECOND 類型。
numtoyminterval??? 將指定的值轉換成INTERVAL YEAR TO MONTH 類型。
round????????????? 按指定的日期參數(年、月、日)四捨五入指定的日期。
sessiontimezone??? 返回當前會話期的時區。
sysdate??????????? 返回系統當前的日期和時間。
?? systimestamp?????? 以timestamp with time zone 類型返回系統日期。
?? to_dsinterval????? 將指定的字符串轉換成INTERVAL DAY TO SECOND類型。
to_timestamp?????? 將指定的字符串轉換成TIMESTAMP類型。
?? to_timestamp_tz??? 將指定的字符串轉換成TIMESTAMP WITH TIME ZONE類型。
?? to_yminterval????? 將指定的字符串轉換成INTERVAL YEAR TO MONTH類型。
tz_lffset????????? 根據指定的值返回相應的時區偏移量。
trunc 按指定的日期參數(年、月、日)剪裁指定的日期。
1、sysdate函數
select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') "now" from dual;
?? now
?? -------------------
?? 2001-10-14,09:02:09
2、add_months(date,x)函數
?? select add_months(to_date('2001-01-30','yyyy-mm-dd'),1) "first" from dual;
?? first
? --------
?? 28-2月-01
3、current_date函數
alter session set time_zone='-5:0';
?? alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
?? select sessiontimezone,current_date from dual;
?? sessintimezone???? current_date
?? --------------???? ------------
?? -05:0016-10月-2001 21:16:09
4、current_timestamp函數
alter session set time_zone='-5:0';
?? alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';
?? select sessiontimezone,current_timestamp from dual;
?? sessiontimezone? current_timestamp
?? ---------------? -----------------------------
?? -05:00 16-10月-2001 21:26:04.715620 p.m. -5:00
5、dbtimezone函數
?? select dbtimezone from dual;
?? dbtime
?? -------
?? +08:00
6、extract函數
?? select extract(year from date'1998-03-07') from dual;
?? extract(year from date'1998-03-07')
?? -----------------------------------
?? 1998
7、from_tz函數
select from_tz(timestamp'2000-03-28 08:00:00','3:00') from dual;
?? from_tz(timestamp'2000-03-28 08:00:00','3:00)
?? -----------------------------------------------
?? 28-3月-00 08:00:00 am +03:00
8、localtimestamp函數
alter session set time_zone='-5:00';
?? select current_timestamp,localtimestamp from dual;
?? current_timestamp localtimestamp
?? ---------------------------------------------------------
?? 04-apr-00 01:27:18.999220 pm -05:00 04-aor-00 01:27:19 pm??
9、months_between函數
select months_between('18-10月-01','18-10月-01') "first"
?? months_between('18-10月-01','19-4月-01') "second' from dual;
?
?? first??? second
?? -------? ----------
?? -6 ? 5.96774194
10、NEW_TIME函數 : 將ZONE1時區的日期DATE轉換成ZON2時區的日期。
AST?? 大西洋標準時間
ADT 大西洋夏令時
??? BST 白令標準時
BDT 白令夏令時
CST?? 中部夏令時
??? EDT?? 東部夏令時
? EST?? 東部標準時
GMT?? 格林尼治標準時
HST?? 阿拉斯加-夏威夷標準時
HDT 阿拉斯加-夏威夷夏令時
MST?? 山地標準時
??? MDT?? 山地夏令時
NST?? 紐芬蘭標準時
PST?? 太平洋標準時
PDT 太平洋夏令時
??? YST?? 育空標準時
??? YDT?? 育空夏令時
select to_char(new_time(sysdate,'pst','gmt'),'yyyy-mm-dd,hh:mi:ss') "result" from dual;
??? result
??? -------------------
??? 2001-10-14,06:28:10
11、NEXT_DAY函數
select next_day(sysdate,'星期五') from dual;
??? next_day(sysda
??? ----------------
??? 19-10月-01
12、NUMTODSINTERVAL(N,'CHAR_EXPR') 函數將指定的N轉換成INTERVAL DAY GO SECOND類型。
select numtodsinterval(100,'hour') from dual;
??? numtodsinterval(100,'hour')
??? --------------------------------
??? +000000004 04:00:00.000000000
13、NUMTOMINTERVAL(N,'CHAR_EXPR')函數將指定的值N轉換成INTERVAL YEAR TO MONTH類型。
select numtoyminterval(100,'month') from dual;
??? numtoyminterval(100,'month')
??? ------------------------------
??? +0.000000008-04
14、ROUND(DATE,[,FORMAT])函數 將指定的值N轉換成INTERVAL YEAR TO MINTH 類型。
select round(to_date('12-6月-01'),'mm') "first"
??? round(to_date('18-6月-01'),'mm') "second" from dual;
??? first???? second
??? -------?? --------
??? 01-6月-01 01-7月-01
15、SESSIONTIMEZONE函數返回當前會話期的時區
select sessiontimezone from dual;
??? session
??? ---------
??? +08:00
16、SYSTIMESTAMP函數:以TIMESTAMP WITH TIME ZONE 類型返回當前系統日期。
select systimestamp from dual;
??? systimestamp
??? -------------
??? 28-10月-01 12.38.55.538741 pm +8:00
17、TO_DSIONTERVAL(CHAR[,NLSPARAM])函數將指定的字符串 轉換成INTERVAL DAY TO SECOND類型。
select employee_id, alst_name from hr.employees
??? where hire_date-to_dsinterval('100 10:00:00')
??? >date '1985-01-01';
18、TO_TIMESTAMP函數將指定的字符串轉換成TIMESTAMP類型
select to_timestamp('1999-12-01 11:00:00','yyyy-mm-dd hh:mi:ss') "first" from dual;
???
??? first
??? ---------
??? 01-DEC-99 11.00.00.000000000 AM
19、TO_TIMESTAMP_TZ(char,[fmt[,nlsparam]])函數將指定的字符串轉換成TIMEST AMP WITH TIME ZONE 類型。
20、TO_YMINTERVAL(char)函數將指定的字符串轉換成INTERVAL YEAR TO MONTH類型。
21、TZ_OFFSET函數
select tz_offset('us/eastern') from dual;
???
??? tz_offs
??? ----------
??? -4:00
22、TRUNC(DATE[,FORMAT])函數將日期DATE按照FORMAT指定的格式進行截取,缺省為'DD',截取日期為當月第一天。
SELECT TRUNC(TO_DATE('12-6月-01'),'MM') "FIRST"
??? TRUNC(TO_DATE('18-6月-01'),'MM') "SECOND" FROM DUAL;
??
??? FIRST???? SECOND
??? -------?? ----------
??? 01-6月-01?? 01-6月-01
?
??? select to_char(sysdate,'yyyy-mm-dd hh:mi:ss am') "result1",
??? to_char(trunc(sysdate),'yyyy-mm-dd hh:mi:ss am') "result2" from dual;
?
??? result1???????????????????????? result2
??? ----------????????????????????? --------------
??? 2001-10-21 02:48:49 下午??????? 2001-10-21 12:00:00 上午
6.6分組(GROUP) 函數
AVG????? 求返回的各列的平均值
COUNT??? 返回查詢的行的數目
GLB????? 返回MSLABLE的最大下界
LUB????? 返回MSLABEL的最小上界
MAX????? 返回查詢列中的最大值
STDDEV?? 返回查詢列的平均偏差
?? SUM????? 返回查詢列的總和
VARIANCE 返回查詢列的統計方差
1、STDDEV函數
select stddev(mgr) from scott.emp;
?
???? stddev(mgr)
???? ------------
???? 103.71466
? 2、VARIANGE([DISTINCTIALL] column)函數查詢列的統計方差
?? select variange(mgr) from scott.emp
???
???? variance(mgr)
???? --------------
???? 10756.7308
6.7雜項(Misc)函數
BILENAME??? 返回一個BFILE位置指示符,指向一個存儲實際的LOB二進制文件的存儲文件
DECODE????? 類似於IF_THEN_ELSE語句
? DUMP??????? 返回有關指定數值的內部表示信息VARCHAR2類型的數值。
EMPTY_BLOB? 返回一個空的二進制指示符
??? EMPTY_CLOB? 返回一個空的字符指示符
??? GREATEST??? 返回給定的參數列表中最大的表達式
??? LEAST?????? 返回給定的參數列表中最小的表達式
NLS_CHARSET_DECL_LEN? 返回NCHAR列的定義長度(以字符長度表示)
? NLS_CHARSET_ID??????? 返回與NLS字符集名稱關聯的NLS集ID號
NLS_CHARSET_NAME????? 返回傳遞給函數的ID關聯的NLS字符名稱
??? NVL?????????????????? 從給定的表達式中選擇第一個不為空的值
SYS_CONTEXT?????????? 返回當前進程的屬性
SYS_GUID ? 產生和返回一個16字節的全局的惟一的標志符(ROW)值
? UID?????????????????? 返回ORACLE中用戶的ID號
USER????????????????? 返回當前用戶名稱
USERENV?????????????? 返回當前工作環境的信息
??? VSIZE???????????????? 返回指定值的內部字節數
轉載于:https://www.cnblogs.com/cuihongyu3503319/archive/2007/11/28/976112.html
總結
以上是生活随笔為你收集整理的pl/sql函数学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 写了一个开源的ASP.Net的系统信息探
- 下一篇: POS 客显 设备 显示 总价 单价 找