ORACLE TO_CHAR()函式中日期格式的使用

bfc99發表於2015-12-04
下面以例項來說明:

SQL> set linesize 200
SQL> show parameter nls_date_language

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
nls_date_language             string            AMERICAN
SQL> show parameter nls_date_format

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
nls_date_format              string            DD-MON-RR
SQL> select sysdate from dual;   --不加輸出格式時,就是使用預設的日期格式 DD-MON-RR,日期描述語言也是預設的日期用語言AMERICAN

SYSDATE
------------
04-DEC-15

SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;  --指定輸出格式為'yyyy-mm-dd'

TO_CHAR(SYSDATE,'YYY
--------------------
2015-12-04

在日期格式中,對月份的格式主要有以下幾種:
mm: 以數字表示(1-12)
mon: 相應語言月的簡寫,比如英文中12月的簡寫是 dec.
MON: 功能同上,只不過簡寫換為大寫
month: 相應語言月的全稱,比如英文中的12月寫為december。
MONTH:功能同上,只不過換為大寫表示

SQL> select to_char(sysdate,'yyyy-mon-dd') from dual; 

TO_CHAR(SYSDATE,'YYYY-MON-DD')
----------------------------------------
2015-dec-04

SQL> select to_char(sysdate,'yyyy-month-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MONTH-DD')
----------------------------------------------------------------------------------------
2015-december -04


SQL> select to_char(sysdate,'yyyy-MONTH-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MONTH-DD')
----------------------------------------------------------------------------------------
2015-DECEMBER -04

在日期格式中,對日的格式主要有以下幾種:
dd: 以數字表示(1-31)
dy: 相應語言中對週中每一天的稱謂的簡寫。比如英文中星期五的簡寫是fri.
DY: 功能同上,換為大寫表示
Dy: 功能同上,換為首字母大寫表示
day:相應語言中對週中每一天的稱謂的全稱。比如英文中星期五的全稱是friday.
DAY:功能同上,換為大寫表示
Day:功能同上,換為首字母大寫表
SQL> select to_char(sysdate,'yyyy-mm-Dy') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DY')
----------------------------------------
2015-12-Fri

SQL> select to_char(sysdate,'yyyy-mm-dy') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DY')
----------------------------------------
2015-12-fri

SQL> select to_char(sysdate,'yyyy-mm-DY') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DY')
----------------------------------------
2015-12-FRI

SQL> select to_char(sysdate,'yyyy-mm-day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DAY')
----------------------------------------------------------------------------------------
2015-12-friday

SQL> select to_char(sysdate,'yyyy-mm-dd day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDDAY')
----------------------------------------------------------------------------------------------
2015-12-04 friday

格式字尾
SP:相應日期部分的英文拼寫
TH:相應日期部分日的序號,即在表示日的數字後加"th"
SQL> select to_char(sysdate,'yyyy-mm-ddth') from dual;

TO_CHAR(SYSDATE,'YYYY-MM
------------------------
2015-12-04th

SQL> select to_char(sysdate,'yyyy-mm-ddspth') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDSPTH')
--------------------------------------------
2015-12-fourth

SQL> select to_char(sysdate,'yyyy-mmsp-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MMSP-D
----------------------------
2015-twelve-04

SQL> select to_char(sysdate,'yyyy-mmspth-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MMSPTH-DD'
--------------------------------
2015-twelfth-04

SQL> select to_char(sysdate,'yyyyth-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYYYTH-
------------------------
2015th-12-04

SQL> select to_char(sysdate,'yyyy-mm-ddthsp') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDTHSP')
--------------------------------------------
2015-12-fourth

SQL> select to_char(sysdate,'yyyysp-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYYYSP-MM-DD')
------------------------------------------------------------------------------------------------
two thousand fifteen-12-04

year: 把年數用英文拼寫的方式輸出
YEAR:功能同上,只不過大寫輸出
SQL> select to_char(sysdate,'year-mm-dd') from dual;

TO_CHAR(SYSDATE,'YEAR-MM-DD')
------------------------------------------------------------------------------------------------
twenty fifteen-12-04

把nls_date_language設為中文後,相應的月份和星期幾用中文表示。
SQL> alter session set nls_date_language='simplified chinese';   --引數中間有空格時,要用單引號把整個引數括起來。

Session altered.

SQL> show parameter nls_date

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
nls_date_format              string            DD-MON-RR
nls_date_language             string            simplified chinese
SQL> select to_char(sysdate,'yyyy-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYY
--------------------
2015-12-04

SQL> select to_char(sysdate,'yyyy-mon-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MON-DD')
--------------------------------
2015-12月-04

SQL> select to_char(sysdate,'yyyy-month-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MONTH-DD')
--------------------------------
2015-12月-04

中文對日期的表示沒有大小寫和縮寫的概念,Dy,DY,dy均是同樣的輸出,其它同。
SQL> select to_char(sysdate,'yyyy-mm-Dy') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DY')
----------------------------------------
2015-12-星期五

SQL> select to_char(sysdate,'yyyy-mm-DY') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DY')
----------------------------------------
2015-12-星期五

SQL> select to_char(sysdate,'yyyy-mm-day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DAY')
----------------------------------------
2015-12-星期五

SQL> select to_char(sysdate,'yyyy-mm-dd day') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDDAY')
----------------------------------------------
2015-12-04 星期五


year,TH和SP只限於用英文輸出表示
SQL> select to_char(sysdate,'yyyy-mm-ddspth') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDSPTH')
--------------------------------------------
2015-12-fourth

SQL> select to_char(sysdate,'yyyysp-mm-dd') from dual;

TO_CHAR(SYSDATE,'YYYYSP-MM-DD')
------------------------------------------------------------------------------------------------
two thousand fifteen-12-04


SQL> select to_char(sysdate,'year-mm-dd') from dual;

TO_CHAR(SYSDATE,'YEAR-MM-DD')
------------------------------------------------------------------------------------------------
twenty fifteen-12-04

SQL> select to_char(sysdate,'yyyysp-mmsp-ddsp') from dual;


TO_CHAR(SYSDATE,'YYYYSP-MMSP-DDSP')
----------------------------------------------------------------------------------------------------------------------------
two thousand fifteen-twelve-four


dl:長日期格式輸出
SQL> select to_char(sysdate,'DL') from dual;

TO_CHAR(SYSDATE,'DL')
--------------------------------------------------------------
星期五, 12月 04, 2015


修改日曆為中華民國日曆後,紀年變為民國紀寫

SQL> alter session set nls_calendar='ROC Official';

Session altered.

SQL> select to_char(sysdate,'DL') from dual;   --2015-1911=104,即公元2015年就是民國104年

TO_CHAR(SYSDATE,'DL')
------------------------------------------------------------
104年12月4日 星期五

e: 相應紀年的簡稱
ee: 相應紀年的全稱
SQL> select to_char(sysdate,'year-mm-dd e') from dual;

TO_CHAR(SYSDATE,'YEAR-MM-DDE')
------------------------------------------------------------------------------------------------------------------------------
one hundred four-12-04 民國

SQL> select to_char(sysdate,'EE') from dual;

TO_CHAR(SYSDATE,'EE')
------------------------------------------------------------
中華民國


可以在函式中指定NLS引數,整個引數和值要用單引號(')括起來,從而只對該次執行生效。
SQL> select to_char(sysdate,'yyyy-mm-dd','nls_calendar=GREGORIAN') from dual;

TO_CHAR(SYSDATE,'YYY
--------------------
2015-12-04

SQL> select to_char(sysdate,'yyyy-mon-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MON-DD')
--------------------------------
0104-12-04


SQL> alter session set nls_calendar=GREGORIAN;

Session altered.

SQL> show parameter nls_date

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
nls_date_format              string            DD-MON-RR
nls_date_language             string            american
SQL> alter session set nls_date_language='simplified chinese';

Session altered.

SQL> show parameter nls_date

NAME                     TYPE            VALUE
------------------------------------ ---------------------- ------------------------------
nls_date_format              string            DD-MON-RR
nls_date_language             string            simplified chinese
SQL> select to_char(sysdate,'yyyy-mon-dd') from dual;

TO_CHAR(SYSDATE,'YYYY-MON-DD')
--------------------------------
2015-12月-04

SQL> select to_char(sysdate,'yyyy-mon-dd','nls_calendar=''ROC Official''') from dual;   --由於引數值中有空格,所以引數值要用單引號括起來,由於其外層又有單引號,要用兩個單引號來表示一個單引號。

TO_CHAR(SYSDATE,'YYYY-MO
------------------------
0104-12-04

SQL> select to_char(sysdate,'yyyy-mon-dd day') from dual;

TO_CHAR(SYSDATE,'YYYY-MON-DDDAY')
----------------------------------------------------------
2015-12月-04 星期五

SQL> select to_char(sysdate,'yyyy-mon-dd day','nls_calendar=''ROC Official''') from dual;

TO_CHAR(SYSDATE,'YYYY-MON-DDDAY','NLS_CALENDAR=''R
--------------------------------------------------
0104-12-04 星期五

可以在格式中指定其它字元,用雙引號(")把相應的字元括起來。輸出時,原樣輸出。
SQL> select to_char(sysdate,'"民國"yyyy-mon-dd day','nls_calendar=''ROC Official''') from dual;

TO_CHAR(SYSDATE,'"民國"YYYY-MON-DDDAY','NLS_CALENDAR=''ROCOFFI
--------------------------------------------------------------
民國0104-12-04 星期五

可以在函式中指定多個NLS引數,兩個引數間用空格隔開。
SQL> select to_char(sysdate,'"民國"yyyy-mon-dd day','nls_calendar=''ROC Official'' nls_date_language=american') from dual;

TO_CHAR(SYSDATE,'"民國"YYYY-MON-DDDAY','NLS_CALENDAR=''ROCOFFICIAL''NLS_DATE_LANGUAGE=AMERICAN')
----------------------------------------------------------------------------------------------------------------------
民國0104-12-04 friday


d:用數字表示星期(1-7)。引數NLS_TERRITORY預設配置時認為一週是從週日開始的,所以,週日是1,週六是7.
SQL> select to_char(sysdate,'yyyy-mm-dd day d') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDDAYD')
--------------------------------------------------
2015-12-04 星期五 6

若希望實現週一是1,週日是7的效果,可使用如下方法來實現

SQL> select to_char(sysdate,'yyyy-mm-dd day','nls_date_language=''numeric date language''') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DDDAY','
----------------------------------
2015-12-04 5 

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

相關文章