oracle函數(shù)介紹(2) 非著名函數(shù)之單行函數(shù)(含如下函數(shù)介紹):
ABS
COS
ACOS
BITAND
CEIL
FLOOR
BIN_TO_NUM
SIN
SINH
ASIN
TAN
TANH
ATAN
EXP
LN
LOG
POWER
SIGN
SQRT
CHR
CONCAT
INITCAP
NLS_INITCAP
ASCII
CURRENT_TIMESTAMP
LOCALTIMESTAMP
SYSTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
EXTRACT
TO_TIMESTAMP
BIN_TO_NUM
CAST
CHARTOROWID
ROWIDTOCHAR
TO_MULTI_BYTE
TO_SINGLE_BYTE
COALESCE
DUMP
EMPTY_BLOB,EMPTY_CLOB
NLS_CHARSET_NAME
NLS_CHARSET_ID
NLS_CHARSET_DECL_LEN
SYS_EXTRACT_UTC
SYS_TYPEID
UID
USER
USERENV
VSIZE
注:N表示數(shù)字型,C表示字符型,D表示日期型,[]表示內(nèi)中參數(shù)可被忽略,fmt表示格式。
單值函數(shù)在查詢(xún)中返回單個(gè)值,可被應(yīng)用到select,where子句,start with以及connect by 子句和having子句。
.數(shù)值型函數(shù)(Number Functions)
數(shù)值型函數(shù)輸入數(shù)字型參數(shù)并返回?cái)?shù)值型的值。多數(shù)該類(lèi)函數(shù)的返回值支持38位小數(shù)點(diǎn),諸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支持36位小數(shù)點(diǎn)。ACOS, ASIN, ATAN, and ATAN2支持30位小數(shù)點(diǎn)。
ABS(n) 返回?cái)?shù)字的絕對(duì)值
例如:SELECT ABS(-1000000.01) FROM DUAL;
COS(n) 返回n的余弦值
例如:SELECT COS(-2) FROM DUAL;
ACOS(n) 反余弦函數(shù),n between -1 and 1,返回值between 0 and pi。
例如:SELECT ACOS(0.9) FROM DUAL;
BITAND(n1,n2) 位與運(yùn)算,這個(gè)太有意思了,雖然沒(méi)想到可能用到哪里,詳細(xì)說(shuō)明一下:
假設(shè)3,9做位與運(yùn)算,3的二進(jìn)制形式為:0011,9的二進(jìn)制形式為:1001,則結(jié)果是0001,轉(zhuǎn)換成10進(jìn)制數(shù)為1。
例如:SELECT BITAND(3,9) FROM DUAL;
CEIL(n) 返回大于或等于n的最小的整數(shù)值
例如:SELECT ceil(18.2) FROM DUAL;
考你一下,猜猜ceil(-18.2)的值會(huì)是什么呢
FLOOR(n) 返回小于等于n的最大整數(shù)值
例如:SELECT FLOOR(2.2) FROM DUAL;
再猜猜floor(-2.2)的值會(huì)是什么呢
BIN_TO_NUM(n1,n2,....n) 二進(jìn)制轉(zhuǎn)向十進(jìn)制
例如:SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL;
SIN(n) 返回n的正玄值,n為弧度。
例如:SELECT SIN(10) FROM DUAL;
SINH(n) 返回n的雙曲正玄值,n為弧度。
例如:SELECT SINH(10) FROM DUAL;
ASIN(n) 反正玄函數(shù),n between -1 and 1,返回值between pi/2 and -pi/2。
例如:SELECT ASIN(0.8) FROM DUAL;
TAN(n) 返回n的正切值,n為弧度
例如:SELECT TAN(0.8) FROM DUAL;
TANH(n) 返回n的雙曲正切值,n為弧度
例如:SELECT TANH(0.8) FROM DUAL;
ATAN(n) 反正切函數(shù),n表示弧度,返回值between pi/2 and -pi/2。
例如:SELECT ATAN(-444444.9999999) FROM DUAL;
EXP(n) 返回e的n次冪,e = 2.71828183 ...
例如:SELECT EXP(3) FROM DUAL;
LN(n) 返回n的自然對(duì)數(shù),n>0
例如:SELECT LN(0.9) FROM DUAL;
LOG(n1,n2) 返回以n1為底n2的對(duì)數(shù),n1 >0 and not 1 ,n2>0
例如:SELECT LOG(1.1,2.2) FROM DUAL;
POWER(n1,n2) 返回n1的n2次方。n1,n2可以為任意數(shù)值,不過(guò)如果m是負(fù)數(shù),則n必須為整數(shù)
例如:SELECT POWER(2.2,2.2) FROM DUAL;
SIGN(n) 如果n<0返回-1,如果n>0返回1,如果n=0返回0.
例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL;
SQRT(n) 返回n的平方根,n為弧度。n>=0
例如:SELECT SQRT(0.1) FROM DUAL;
.字符型函數(shù)返回字符值(Character Functions Returning Character Values)
該類(lèi)函數(shù)返回與輸入類(lèi)型相同的類(lèi)型。
返回的CHAR類(lèi)型值長(zhǎng)度不超過(guò)2000字節(jié);
返回的VCHAR2類(lèi)型值長(zhǎng)度不超過(guò)4000字節(jié);
如果上述應(yīng)返回的字符長(zhǎng)度超出,oracle并不會(huì)報(bào)錯(cuò)而是直接截?cái)嘀磷畲罂芍С珠L(zhǎng)度返回。
返回的CLOB類(lèi)型值長(zhǎng)度不超過(guò)4G;
對(duì)于CLOB類(lèi)型的函數(shù),如果返回值長(zhǎng)度超出,oracle不會(huì)返回任何錯(cuò)誤而是直接拋出錯(cuò)誤。
CHR(N[ USING NCHAR_CS]) 返回指定數(shù)值在當(dāng)前字符集中對(duì)應(yīng)的字符
例如:SELECT CHR(95) FROM DUAL;
CONCAT(c1,c2) 連接字符串,等同于||
例如:SELECT concat('aa','bb') FROM DUAL;
INITCAP(c) 將字符串中單詞的第一個(gè)字母轉(zhuǎn)換為大寫(xiě),其它則轉(zhuǎn)換為小寫(xiě)
例如:SELECT INITCAP('whaT is this') FROM DUAL;
NLS_INITCAP(c) 返回指定字符串,并將字符串中第一個(gè)字母變大寫(xiě),其它字母變小寫(xiě)
例如:SELECT NLS_INITCAP('中華miNZHu') FROM DUAL;
它還具有一個(gè)參數(shù):Nlsparam用來(lái)指定排序規(guī)則,可以忽略,默認(rèn)狀態(tài)該參數(shù)為當(dāng)前session的排序規(guī)則。
.字符型函數(shù)返回?cái)?shù)字值(Character Functions Returning Number Values)
本類(lèi)函數(shù)支持所有的數(shù)據(jù)類(lèi)型
ASCII(c) 與chr函數(shù)的用途剛剛相反,本函數(shù)返回指定字符在當(dāng)前字符集下對(duì)應(yīng)的數(shù)值。
例如:SELECT ASCII('_') FROM DUAL;
.日期函數(shù)(Datetime Functions)
本類(lèi)函數(shù)中,除months_between返回?cái)?shù)值外,其它都將返回日期。
CURRENT_TIMESTAMP([n]) 返回當(dāng)前session所在時(shí)區(qū)的日期和時(shí)間。n表示毫秒級(jí)的精度,不大于6
例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL;
LOCALTIMESTAMP([n]) 與上同,返回當(dāng)前session所在時(shí)區(qū)的日期和時(shí)間。n表示毫秒級(jí)的精度,不大于6
例如:SELECT LOCALTIMESTAMP(3) FROM DUAL;
SYSTIMESTAMP([n]) 與上同,返回當(dāng)前數(shù)據(jù)庫(kù)所在時(shí)區(qū)的日期和時(shí)間,n表示毫秒級(jí)的精度,>0 and <6
例如:SELECT SYSTIMESTAMP(4) FROM DUAL;
DBTIMEZONE 返回?cái)?shù)據(jù)庫(kù)的當(dāng)前時(shí)區(qū)
例如:SELECT DBTIMEZONE FROM DUAL;
SESSIONTIMEZONE 返回當(dāng)前session所在時(shí)區(qū)
例如:SELECT SESSIONTIMEZONE FROM DUAL;
EXTRACT(key from date) key=(year,month,day,hour,minute,second) 從指定時(shí)間提到指定日期列
例如:SELECT EXTRACT(year from sysdate) FROM DUAL;
TO_TIMESTAMP(c1[,fmt]) 將指定字符按指定格式轉(zhuǎn)換為timestamp格式。
例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
.轉(zhuǎn)換函數(shù)(Conversion Functions)
轉(zhuǎn)換函數(shù)將指定字符從一種類(lèi)型轉(zhuǎn)換為另一種,通常這類(lèi)函數(shù)遵循如下慣例:函數(shù)名稱(chēng)后面跟著待轉(zhuǎn)換類(lèi)型以及輸出類(lèi)型。
BIN_TO_NUM(n1,n2...n) 將一組位向量轉(zhuǎn)換為等價(jià)的十進(jìn)制形式。
例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL;
CAST(c as newtype) 將指定字串轉(zhuǎn)換為指定類(lèi)型,基本只對(duì)字符類(lèi)型有效,比如char,number,date,rowid等。此類(lèi)轉(zhuǎn)換有一個(gè)專(zhuān)門(mén)的表列明了哪種類(lèi)型可以轉(zhuǎn)換為哪種類(lèi)型,此處就不作酹述。
例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL;
CHARTOROWID(c) 將字符串轉(zhuǎn)換為rowid類(lèi)型
例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;
ROWIDTOCHAR(rowid) 轉(zhuǎn)換rowid值為varchar2類(lèi)型。返回串長(zhǎng)度為18個(gè)字節(jié)。
例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL;
TO_MULTI_BYTE(c) 將指定字符轉(zhuǎn)換為全角并返回char類(lèi)型字串
例如:SELECT TO_MULTI_BYTE('ABC abc 中華') FROM DUAL;
TO_SINGLE_BYTE(c) 將指定字符轉(zhuǎn)換為半角并返回char類(lèi)型字串
例如:SELECT TO_SINGLE_BYTE('ABC abc中華') FROM DUAL;
.其它輔助函數(shù)(Miscellaneous Single-Row Functions)
COALESCE(n1,n2,....n) 返回序列中的第一個(gè)非空值
例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL;
DUMP(exp[,fmt[,start[,length]]])
dump是個(gè)功能非常強(qiáng)悍的函數(shù),對(duì)于深入了解oracle存儲(chǔ)的人而言相當(dāng)有用。所以對(duì)于我們這些僅僅只是應(yīng)用的人而言就不知道能將其應(yīng)用于何處了。此處僅介紹用法,不對(duì)其功能做深入分析。
如上所示,dump擁有不少參數(shù)。其本質(zhì)是以指定格式,返回指定長(zhǎng)度的exp的內(nèi)部表示形式的varchar2值。fmt含4種格式:8||10||16||17,分別表示8進(jìn)制,10進(jìn)制,16進(jìn)制和單字符,默認(rèn)為10進(jìn)制。start參數(shù)表示開(kāi)始位置,length表示以,分隔的字串?dāng)?shù)。
例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;
EMPTY_BLOB,EMPTY_CLOB 這兩個(gè)函數(shù)都是返回空l(shuí)ob類(lèi)型,通常被用于insert和update等語(yǔ)句以初始化lob列,或者將其置為空。EMPTY表示LOB已經(jīng)被初始化,只不過(guò)還沒(méi)有用來(lái)存儲(chǔ)數(shù)據(jù)。
NLS_CHARSET_NAME(n) 返回指定數(shù)值對(duì)應(yīng)的字符集名稱(chēng)。
例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL;
NLS_CHARSET_ID(c) 返回指定字符對(duì)應(yīng)的字符集id。
例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL;
NLS_CHARSET_DECL_LEN(n1,n2) 返回一個(gè)NCHAR值的聲明寬度(以字符為單位).n1是該值以字節(jié)為單位的長(zhǎng)度,n2是該值的字符集ID
例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL;
SYS_EXTRACT_UTC(timestamp) 返回標(biāo)準(zhǔn)通用時(shí)間即格林威治時(shí)間。
例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL;
SYS_TYPEID(object_type) 返回對(duì)象類(lèi)型對(duì)應(yīng)的id。
例如:這個(gè)這個(gè),沒(méi)有建立過(guò)自定義對(duì)象,咋做示例?
UID 返回一個(gè)唯一標(biāo)識(shí)當(dāng)前數(shù)據(jù)庫(kù)用戶(hù)的整數(shù)。
例如:SELECT UID FROM DUAL;
USER 返回當(dāng)前session用戶(hù)
例如:SELECT USER FROM DUAL;
USERENV(c) 該函數(shù)用來(lái)返回當(dāng)前session的信息,據(jù)oracle文檔的說(shuō)明,userenv是為了保持向下兼容的遺留函數(shù)。oracle公司推薦你使用sys_context函數(shù)調(diào)用USERENV命名空間來(lái)獲取相關(guān)信息,所以大家了解下就行了。
例如:SELECT USERENV('LANGUAGE') FROM DUAL;
VSIZE(c) 返回c的字節(jié)數(shù)。
例如:SELECT VSIZE('abc中華') FROM DUAL;
聯(lián)系客服