1. 程式人生 > >oracle常用函式(四)----轉換函式

oracle常用函式(四)----轉換函式

<div>作者:<a target=_blank href="http://www.cnblogs.com/kerrycode/" target="_blank">瀟湘隱者</a></div><div>出處:<a target=_blank href="http://www.cnblogs.com/kerrycode/" target="_blank">http://www.cnblogs.com/kerrycode/</a></div>
------------------------------------------型別轉換函式----------------------------------------------
--自動型別轉換, 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()
-----------------------------------------------------------------------------------------------------------