TO_CHAR 和 TO_DATE的一些用法總結


對於初學者來說,日期處理那快一向是問題的集中地.今天剛剛看了個案例,將的就是ORACLE日期處理中的錯誤,其關鍵原因,就是TO_CHAR 和TO_DATE的用法不清晰,,事實上,這兩個東西也特別容易混淆,為此,把他們的區別再介紹下.

 

to char 是把日期或數字轉換為字符串 
to date 是把字符串轉換為數據庫中得日期類型 
 轉換函數 
 TO_CHAR 
使用TO_CHAR函數處理數字 
TO_CHAR(number, '格式') 
TO_CHAR(salary,’$99,999.99’); 
使用TO_CHAR函數處理日期 
TO_CHAR(date,’格式’); 
 TO_NUMBER 
使用TO_NUMBER函數將字符轉換為數字 
TO_NUMBER(char[, '格式']) 
 TO_DATE 
使用TO_DATE函數將字符轉換為日期 
TO_DATE(char[, '格式'])

TO_DATE:

 

spl> select * from emp
where dates 
between
to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')
and
to_date('2007-06-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss')

當省略HH、MI和SS對應的輸入參數時,Oracle使用0作為DEFAULT值。如果輸入的日期數據忽略時間部分,Oracle會將時、分、秒部分都置為0,也就是說會取整到日。

同樣,忽略了DD參數,Oracle會采用1作為日的默認值,也就是說會取整到月。

但是,不要被這種“慣性”所迷惑,如果忽略MM參數,Oracle並不會取整到年,取整到當前月。

注意:

1.在使用Oracle的to_date函數來做日期轉換時,可能會直覺地采用“yyyy-MM-dd HH:mm:ss”的格式作為格式進行轉換,但是在Oracle中會引起錯誤:“ORA 01810 格式代碼出現兩次”。如:select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual;
原因是SQL中不區分大小寫,MM和mm被認為是相同的格式代碼,所以Oracle的SQL采用了mi代替分鍾。select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;
2.另要以24小時的形式顯示出來要用HH24
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分鍾
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm會顯示月份




TO_CHAR:

1、

TO_CHAR ( nchar | clob | nclob )

以接受NCHAR, NVARCHAR2, CLOB, NCLOB類型的字符串作為自己的參數,把它們轉換成數據庫的字符集的字符串。請看下面這個例子:

這個是national 字符集的情況:

 

這個是clob的情況:

 

09:59:03 SQL> create table t(a clob) ;

Table created.

 

09:59:15 SQL> insert into t values ('aaaaaaaaaaaaaaaaaaaaaaaaaa') ;

1 row created.

 

09:59:31 SQL> select * from t;

A

--------------------------------------------------------------------------------

aaaaaaaaaaaaaaaaaaaaaaaaaaa

 

10:00:03 SQL> select to_char(a) from t

TO_CHAR(A)

----------------------------------------------------------------------------------------------------------------------

aaaaaaaaaaaaaaaaaaaaaaaaaaa

 

 

2、

TO_CHAR ( date [, fmt [, 'nlsparam'] ])

它的作用是將一個日期date轉換成一個指定格式fmt的字符串。有關nlsparam基本可以不管,它是用來確定返回的日期的名字以及縮寫詞等的形式,如你的數據庫語言如果是英語,那么返回的月份表示可能是類似這樣的“MAY”;而如果你的數據庫語言是漢語,那么返回的月份表示可能是類似這樣的“五月”。nlsparam就是用來改變這些顯示,如假設你的數據庫語言是漢語,而你像把它變成英語的表示,則可以這樣設置:nls_date_language=’english’。99%可以不用管這個參數。如下面這個例子:

 

10:13:29 SQL> select to_char(sysdate,'yyyy-mm-dd') today from dual;

TODAY

----------

2007-09-24

 

可能大家問題最多的就是fmt這個格式設置有哪些了,下面我列出一個列表來說明這些:

 

 

元素

表示含義

-

/

,

.

;

:

“test”

這些標點符號和具體的字符串,最終會顯示出來,其實他們啟到的作用就是分隔,如下面這個日期:

2007-9-16

這里符合“-”就啟到了分隔年月日的作用。

AD

A.D.

公元后

BC

B.C.

公元前

AM

A.M.

早上,上午

PM

P.M.

下午

D

一周的第幾天,星期天是1

DAY

星期幾,,一共用9個字符大小來顯示,如果沒有這么長,名稱的右邊用空格來填充

DD

一個月的第幾天,【1~31】

DDD

一年的第幾天,【1~366】

DY

星期幾,但是是簡稱,如周一可能就是MON

FF[0..9]

這個是用於timestamp類型的,用於表示將秒分成多少位數來表示,在FF后面跟上一個0到9的數字。

HH

小時,【1~12】

HH12

小時,【1~12】

HH24

小時,【0~23】

MI

分鍾,【0~59】

MM

月份,【01~12】

MON

月份,但是是月份的簡稱,如1月可能是JAN來表示

MONTH

月份,月份的名稱,如9月可能是september來表示,一共用9個字符大小來顯示,如果沒有這么長,名稱的右邊用空格來填充

Q

季節,【1,2,3,4】分別代表春夏秋冬

SS

秒,【0~59】

SSSS

從午夜0秒開始計算到現在的秒數

WW

一年的第幾個周,【1~53】

W

一個月的第幾個周,【1~5】

Y,YYY

年份,中間有個逗號

YEAR

SYEAR

年份,用字符串顯示,S表示指示公元前(BC)使用“-”表示

YYYY

SYYY

4個數字的年份,S表示指示公元前(BC)使用“-”表示

YYY

YY

Y

分別表示年份的后面三個、兩個、一個數字

 

 

 

[@more@]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM