1. to_char() 是用于将日期、数字格式改成文本格式呈现
其参数 为 to_char(values, 'format','NLS_PARAM')
values--需要转变的值
'format'--希望呈现的格式
'NLS_PARAM' ---可以是多种NLS_参数值,用于在to_char中临时指定 NLS_的显示形式
实例:
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的效果,可使用如下方法来实现
注意: 与 d 的区别
d:用数字表示星期(1-7)。参数NLS_TERRITORY默认配置时认为一周是从周日开始的,所以,周日是1,周六是7
day of numeric date language标示将format中得day 转化成对应数字 周一 --1, 周二--2。。。 周日--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