TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Oracle TO_CHAR()函数返回以指定格式表示的字符串DATE或INTERVAL值。
{ datetime | interval }是一个DateTime或一个INTERVAL 类型,是要转换的日期
fmt是一个字符串,用于确定日期转换的格式。
如果省略fmt,则date转换VARCHAR2为如下值:
DATE 值将转换为默认日期格式的值。
TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE值将转换为默认时间戳格式的值。
TIMESTAMP WITH TIME ZONE 值将使用时区格式转换为默认时间戳中的值。
'nlsparam'参数指定了月和日名称的缩写语言。这个参数可以有这样的形式:
'NLS_DATE_LANGUAGE = 语言 '
例如,Monday,Mon,January,Jan等。
如果省略'nlsparam',则此函数使用会话的默认日期语言。
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions180.htm
字符串' 17:45:29' 的日期时间格式模型是' HH24:MI:SS'。
字符串' 11-Nov-1999' 的日期时间格式模型是' DD-Mon-YYYY'。
测试
注意 要想达到 ”字符串' 11-Nov-1999' 的日期时间格式模型是' DD-Mon-YYYY' ”。需要指定 'nlsparam' 参数
select TO_CHAR(sysdate,'DD-Mon-YYYY','NLS_DATE_LANGUAGE=English') from dual
https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34510
https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm#i34924
Uppercase Letters in Date Format Elements
Capitalization in a spelled-out word, abbreviation, or Roman numeral follows capitalization in the corresponding format element. For example, the date format model 'DAY' produces capitalized words like 'MONDAY'; 'Day' produces 'Monday'; and 'day' produces 'monday'.
拼写单词,缩写或罗马数字中的大写在相应的格式元素中大写。例如,日期格式模型'DAY'产生像'MONDAY'这样的大写单词; 'Day'产生'Monday'; 而''day'产生'monday'。
select TO_CHAR(sysdate,'DAY-Mon-YYYY','NLS_DATE_LANGUAGE=English') from dual
select TO_CHAR(sysdate,'Day-Mon-YYYY','NLS_DATE_LANGUAGE=English') from dual
select TO_CHAR(sysdate,'day-Mon-YYYY','NLS_DATE_LANGUAGE=English') from dual
因为是英文文档,所以要指定'NLS_DATE_LANGUAGE=English'
You can include these characters in a date format model:
- Punctuation such as hyphens, slashes, commas, periods, and colons
- Character literals, enclosed in double quotation marks
These characters appear in the return value in the same location as they appear in the format model.
您可以在日期格式模型中包含这些字符:
- 标点符号,如连字符,斜杠,逗号,句点和冒号
- 字符文字,用双引号括起来
这些字符出现在返回值中与格式模型中显示的位置相同的位置。
Element | Specify in TO_* datetime functions? | Description |
| Yes | Punctuation and quoted text is reproduced in the result. 格式符中可以包含左边的元素 |
select TO_CHAR(sysdate,' "今天" day-Mon-YYYY') from dual
其次 格式字符串中还可以包含 空格
| Yes | AD indicator with or without periods. AD 在汉语中显示为公元 |
select TO_CHAR(sysdate,'AD day-Mon-YYYY') from dual
select TO_CHAR(sysdate,'A.D. day-Mon-YYYY') from dual 还是一样
| Yes | Meridian indicator with or without periods. 可以显示当前是下午还是上午 |
select TO_CHAR(sysdate,'AM day-Mon-YYYY') from dual
| Yes | BC indicator with or without periods. |
select TO_CHAR(sysdate,'BC day-Mon-YYYY') from dual
可见他和AM一样,都表示公元
| Yes | Day of week (1-7). |
select TO_CHAR(sysdate,'D') from dual
在我们底盘今天是星期四
| Yes | Name of day, padded with blanks to display width of the widest name of day in the date language used for this element. |
select TO_CHAR(sysdate,'DAY') from dual
| Yes | Day of month (1-31). |
select TO_CHAR(sysdate,'DD') from dual
嗯,今天是 10月18号
| Yes | Day of year (1-366). 一年的第多少天 |
select TO_CHAR(sysdate,'DDD') from dual
下面这很好理解
| Yes | Hour of day (1-12). |
| No | Hour of day (1-12). |
| Yes | Hour of day (0-23). |
| Yes | Minute (0-59). 电脑上当前的分钟 比 oracle查出来的分钟 多了3分钟 |
| Yes | Month (01-12; January = 01). |
| Yes | Abbreviated name of month. |
| Yes | Name of month, padded with blanks to display width of the widest name of month in the date language used for this element. |
| Yes | Second (0-59). |
IW | No | Week of year (1-52 or 1-53) based on the ISO standard. 一年中的第几周 |
WW | No | Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. 一年中的第几周 ,一年的第一天就是第一周的第一天 即每年的1月1日作为一周的第一天 |
W | No | Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. 一个月的第几周, 将每月的第一天作为一周的开始 , |
select TO_CHAR(sysdate,'IW') from dual --42 一年中的第几周
select TO_CHAR(sysdate,'WW') from dual --42
select TO_CHAR(TO_DATE('2018-01-01','YYYY-MM-DD'),'YYYY-MM-DD DAY') from dual --2018-10-01 星期一 可见一周第一天就是星期一 即1月1日都是星期一
select TO_CHAR(sysdate,'W','NLS_DATE_LANGUAGE=English') from dual --3 一个月中的第几周
SELECT TO_DATE('2018-10-01','YYYY-MM-DD') FROM DUAL --01-10月-18
select TO_CHAR(TO_DATE('2018-10-01','YYYY-MM-DD'),'YYYY-MM-DD DAY') from dual --2018-10-01 星期一 可见一周第一天就是星期一 即每月1日都是星期一
| Yes | Year with comma in this position. |
| Yes | 4-digit year; |
| Yes | Last 3, 2, or 1 digit(s) of year. |