ORACLE函式介紹第二篇 非著名函式之單值函式

junsansi發表於2007-08-29

oracle函式介紹(2) 非著名函式之單行函式(含如下函式介紹):
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表示數字型,C表示字元型,D表示日期型,[]表示內中引數可被忽略,fmt表示格式。

  單值函式在查詢中返回單個值,可被應用到select,where子句,start with以及connect by 子句和having子句。
.數值型函式(Number Functions)
數值型函式輸入數字型引數並返回數值型的值。多數該類函式的返回值支援38位小數點,諸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支援36位小數點。ACOS, ASIN, ATAN, and ATAN2支援30位小數點。

ABS(n) 返回數字的絕對值
例如:SELECT ABS(-1000000.01) FROM DUAL;

COS(n) 返回n的餘弦值
例如:SELECT COS(-2) FROM DUAL;

ACOS(n) 反餘弦函式,n between -1 and 1,返回值between 0 and pi。
例如:SELECT ACOS(0.9) FROM DUAL;

BITAND(n1,n2) 位與運算,這個太有意思了,雖然沒想到可能用到哪裡,詳細說明一下:
假設3,9做位與運算,3的二進位制形式為:0011,9的二進位制形式為:1001,則結果是0001,轉換成10進位制數為1。
例如:SELECT BITAND(3,9) FROM DUAL;

CEIL(n) 返回大於或等於n的最小的整數值
例如:SELECT ceil(18.2) FROM DUAL;
考你一下,猜猜ceil(-18.2)的值會是什麼呢

FLOOR(n) 返回小於等於n的最大整數值
例如:SELECT FLOOR(2.2) FROM DUAL;
再猜猜floor(-2.2)的值會是什麼呢

BIN_TO_NUM(n1,n2,....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) 反正玄函式,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) 反正切函式,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的自然對數,n>0
例如:SELECT LN(0.9) FROM DUAL;

LOG(n1,n2) 返回以n1為底n2的對數,n1 >0 and not 1 ,n2>0
例如:SELECT LOG(1.1,2.2) FROM DUAL;

POWER(n1,n2) 返回n1的n2次方。n1,n2可以為任意數值,不過如果m是負數,則n必須為整數
例如: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;

.字元型函式返回字元值(Character Functions Returning Character Values)
  該類函式返回與輸入型別相同的型別。
返回的CHAR型別值長度不超過2000位元組;
返回的VCHAR2型別值長度不超過4000位元組;
如果上述應返回的字元長度超出,oracle並不會報錯而是直接截斷至最大可支援長度返回。

返回的CLOB型別值長度不超過4G;
對於CLOB型別的函式,如果返回值長度超出,oracle不會返回任何錯誤而是直接丟擲錯誤。

CHR(N[ USING NCHAR_CS]) 返回指定數值在當前字符集中對應的字元
例如:SELECT CHR(95) FROM DUAL;

CONCAT(c1,c2) 連線字串,等同於||
例如:SELECT concat('aa','bb') FROM DUAL;

INITCAP(c) 將字串中單詞的第一個字母轉換為大寫,其它則轉換為小寫
例如:SELECT INITCAP('whaT is this') FROM DUAL;

NLS_INITCAP(c) 返回指定字串,並將字串中第一個字母變大寫,其它字母變小寫
例如:SELECT NLS_INITCAP('中華miNZHu') FROM DUAL;
它還具有一個引數:Nlsparam用來指定排序規則,可以忽略,預設狀態該引數為當前session的排序規則。

.字元型函式返回數字值(Character Functions Returning Number Values)
本類函式支援所有的資料型別
ASCII(c) 與chr函式的用途剛剛相反,本函式返回指定字元在當前字符集下對應的數值。
例如:SELECT ASCII('_') FROM DUAL;

.日期函式(Datetime Functions)
本類函式中,除months_between返回數值外,其它都將返回日期。
CURRENT_TIMESTAMP([n]) 返回當前session所在時區的日期和時間。n表示毫秒級的精度,不大於6
例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL;

LOCALTIMESTAMP([n]) 與上同,返回當前session所在時區的日期和時間。n表示毫秒級的精度,不大於6
例如:SELECT LOCALTIMESTAMP(3) FROM DUAL;

SYSTIMESTAMP([n]) 與上同,返回當前資料庫所在時區的日期和時間,n表示毫秒級的精度,>0 and <6
例如:SELECT SYSTIMESTAMP(4) FROM DUAL;

DBTIMEZONE 返回資料庫的當前時區
例如:SELECT DBTIMEZONE FROM DUAL;

SESSIONTIMEZONE 返回當前session所在時區
例如:SELECT SESSIONTIMEZONE FROM DUAL;

EXTRACT(key from date) key=(year,month,day,hour,minute,second) 從指定時間提到指定日期列
例如:SELECT EXTRACT(year from sysdate) FROM DUAL;

TO_TIMESTAMP(c1[,fmt]) 將指定字元按指定格式轉換為timestamp格式。
例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;

.轉換函式(Conversion Functions)
轉換函式將指定字元從一種型別轉換為另一種,通常這類函式遵循如下慣例:函式名稱後面跟著待轉換型別以及輸出型別。

BIN_TO_NUM(n1,n2...n) 將一組位向量轉換為等價的十進位制形式。
例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL;

CAST(c as newtype) 將指定字串轉換為指定型別,基本只對字元型別有效,比如char,number,date,rowid等。此類轉換有一個專門的表列明瞭哪種型別可以轉換為哪種型別,此處就不作酹述。
例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL;

CHARTOROWID(c) 將字串轉換為rowid型別
例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;

ROWIDTOCHAR(rowid) 轉換rowid值為varchar2型別。返回串長度為18個位元組。
例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL;

TO_MULTI_BYTE(c) 將指定字元轉換為全形並返回char型別字串
例如:SELECT TO_MULTI_BYTE('ABC abc 中華') FROM DUAL;

TO_SINGLE_BYTE(c) 將指定字元轉換為半形並返回char型別字串
例如:SELECT TO_SINGLE_BYTE('ABC abc中華') FROM DUAL;

.其它輔助函式(Miscellaneous Single-Row Functions)
COALESCE(n1,n2,....n) 返回序列中的第一個非空值
例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL;

DUMP(exp[,fmt[,start[,length]]])
dump是個功能非常強悍的函式,對於深入瞭解oracle儲存的人而言相當有用。所以對於我們這些僅僅只是應用的人而言就不知道能將其應用於何處了。此處僅介紹用法,不對其功能做深入分析。
如上所示,dump擁有不少引數。其本質是以指定格式,返回指定長度的exp的內部表示形式的varchar2值。fmt含4種格式:8||10||16||17,分別表示8進位制,10進位制,16進位制和單字元,預設為10進位制。start參數列示開始位置,length表示以,分隔的字串數。
例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;

EMPTY_BLOB,EMPTY_CLOB 這兩個函式都是返回空lob型別,通常被用於insert和update等語句以初始化lob列,或者將其置為空。EMPTY表示LOB已經被初始化,只不過還沒有用來儲存資料。

NLS_CHARSET_NAME(n) 返回指定數值對應的字符集名稱。
例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL;

NLS_CHARSET_ID(c) 返回指定字元對應的字符集id。
例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL;

NLS_CHARSET_DECL_LEN(n1,n2) 返回一個NCHAR值的宣告寬度(以字元為單位).n1是該值以位元組為單位的長度,n2是該值的字符集ID
例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL;

SYS_EXTRACT_UTC(timestamp) 返回標準通用時間即格林威治時間。
例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL;

SYS_TYPEID(object_type) 返回物件型別對應的id。
例如:這個這個,沒有建立過自定義物件,咋做示例?

UID 返回一個唯一標識當前資料庫使用者的整數。
例如:SELECT UID FROM DUAL;

USER 返回當前session使用者
例如:SELECT USER FROM DUAL;

USERENV(c) 該函式用來返回當前session的資訊,據oracle文件的說明,userenv是為了保持向下相容的遺留函式。oracle公司推薦你使用sys_context函式呼叫USERENV名稱空間來獲取相關資訊,所以大家瞭解下就行了。
例如:SELECT USERENV('LANGUAGE') FROM DUAL;

VSIZE(c) 返回c的位元組數。
例如:SELECT VSIZE('abc中華') FROM DUAL;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22279/,如需轉載,請註明出處,否則將追究法律責任。

相關文章