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:spa

 

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')
ci

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

一樣,忽略了DD參數,Oracle會採用1做爲日的默認值,也就是說會取整到月。io

可是,不要被這種「慣性」所迷惑,若是忽略MM參數,Oracle並不會取整到年,取整到當前月。table

注意:test

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:date

一、select

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

 

 

二、

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@]

相關文章
相關標籤/搜索