作者: 瀟湘隱者 出處: http://www.cnblogs.com/kerrycode/
------------------------------------------類型轉換函式----------------------------------------------
--自動類型轉換, ORACLE 可以自動根據具體情況進行如下轉換:
*字串到數值
*字串到日期
*數值到字串
*日期到字串
EX:
--*字串到數值
SELECT '3.14159' + 20 FROM DUAL;
SELECT '3.1T' + 20 FROM DUAL; --報錯:無效數字,即字串必須能轉換為數實值型別才能進行操作
--*數值到字串
SELECT '100' || 124 FROM DUAL;
--1: TO_CHAR(DATE,'FORMAT')
把對應的資料轉換為字串類型
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SAL) FROM SCOTT.EMP;
SELECT TO_CHAR(122323.45, '$99999999.99') FROM DUAL;
Y或YY或YYY 年的最後一位,兩位或三位
SELECT TO_CHAR(SYSDATE, 'YYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YY') FROM DUAL;
SYEAR或YEAR SYEAR使公元前的年份前加一負號
SELECT TO_CHAR(SYSDATE, 'SYEAR') FROM DUAL; --TWENTY ELEVEN
Q 季度,1~3月為第一季度
SELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- 2表示第二季度
MM 月份數
SELECT TO_CHAR(SYSDATE, 'MM') FROM DUAL; --04表示4月
RM 月份的羅馬錶示
SELECT TO_CHAR(SYSDATE, 'RM') FROM DUAL; --IV表示4月
Month 用9個字元長度表示的月份名
SELECT TO_CHAR(SYSDATE, 'MONTH') FROM DUAL; -- 4月
WW 當年第幾周
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- 24表示2002年6月13日為第24周
W 本月第幾周
SELECT TO_CHAR(SYSDATE, 'W') FROM DUAL; -- 2011年04月26日為第4周
DDD 當年第幾天. 1月1日為001,2月1日為032
SELECT TO_CHAR(SYSDATE, 'DDD') FROM DUAL;
DD 當月第幾天
SELECT TO_CHAR(SYSDATE, 'DD') FROM DUAL;
D 周內第幾天
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;
DY 周內第幾天縮寫
SELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL;
HH或HH12 12進位小時數
SELECT TO_CHAR(SYSDATE, 'HH') FROM DUAL;
HH24 24小時制
SELECT TO_CHAR(SYSDATE, 'HH24') FROM DUAL;
MI 分鐘數(0~59)
SELECT TO_CHAR(SYSDATE, 'MI') FROM DUAL;
提示注意不要將MM格式用於分鐘(分鐘應該使用MI)。MM是用於月份的格式,將它用於分鐘也能工作,但結果是錯誤的。
SS 秒數(0~59)
SELECT TO_CHAR(SYSDATE, 'SS') FROM DUAL;
--2: TO_DATE(STRING,'FORMAT')
將字串轉化為ORACLE中的一個日期
SELECT TO_DATE('2011-03-24', 'YYYY/MM/DD') FROM DUAL; --格式化後依然為 2011-3-24, 很是納悶,自己查資料解決這個問題
SELECT TO_DATE('2011/03/24', 'YYYY-MM-DD') FROM DUAL;
--3: TO_NUMBER
將給出的字元轉換為數字
SELECT TO_NUMBER('2008') AS Year FROM DUAL;
--4: RUNC(for number)
按照指定的精度截取一個數
TRUNC函數返回處理後的數值,其工作機制與ROUND函數極為類似,只是該函數不對指定小數前或後的部分做相應舍入選擇處理,而統統截去。
其具體的文法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取處理的數值
decimals 指明需保留小數點後面的位元。可選項,忽略它則截去所有的小數部分
SELECT TRUNC(314.14159234, -2) AS FirstNumber, TRUNC(314.14159234,2) FROM DUAL;
--5: CHARTOROWID
把包含外部格式的ROWID的CHAR或VARCHAR2數值轉換為內部的二進位格式.參數string必須是包含外部格式的ROWID的18字元的字串.
oracle7和 oracle8中的外部格式是不同的.CHARTOROWID是ROWIDTOCHAR的反函數.
SELECT ROWID, CHARTOROWID('adcddfADGEDGJGFRYJ'), ENAME FROM SCOTT.EMP;
--6: ROWIDTOCHAR
將ROWID資料類型轉換為字元類型
將ROWID類型的數值rowid轉換為其外部的18字元的字串表示,在oracle7和oracle8之間有些不一樣的地方. ROWIDTOCHAR和CHARTOROWID是兩個相反的函數.
SELECT ROWID, ROWIDTOCHAR(ROWID), ENAME FROM SCOTT.EMP
--7: CONVERT(c,dset,sset)
將源字串 sset從一個語言字元集轉換到另一個目的dset字元集
SELECT CONVERT('? ê í ó ? A B C D E ', 'US7ASCII', 'WE8ISO8859P1') FROM DUAL;
--8:HEXTORAW
將一個十六進位構成的字串轉換raw
SELECT HEXTORAW('324') FROM DUAL;
--9: RAWTOHEX
將RAW類數值rawvalue轉換為一個相應的十六進位表示的字串. rawvalue中的每個位元組都被轉換為一個雙位元組的字串. RAWTOHEX和HEXTORAW是兩個相反的函數.
SELECT RAWTOHEX('11') FROM DUAL;
--10: TO_MULTI_BYTE
將字串中的單位元組字元轉化為多位元組字元
即將指定字元轉換為全形並返回char類型字串
SELECT TO_MULTI_BYTE('ABC abc 中華') FROM DUAL;
SELECT TO_MULTI_BYTE('AFDB') FROM DUAL;
--11: DUMP(s,fmt,start,length)
DUMP函數以fmt指定的內部數字格式返回一個VARCHAR2類型的值
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;
--12: EMPTY_BLOB()
這兩個函數都是用來對大資料類型欄位進行初始化操作的函數
--13: EMPTY_CLOB()
-----------------------------------------------------------------------------------------------------------