TO_CHAR¶
说明¶
转换成CHAR类型。
参数¶
varchar_expression
插入数值类型的字符串。
numeric_expression
int_expression
bigint_expression
float_expression
double_expression
timestamp_expression
timestamptz_expression
interval_expression
date_expression
clob_expression
给定的不同类型的表达式
text_expression
给定的格式表达式。
- 对于数值型的转换,每一位数字位都要对应一个0,如里不对应着0,则不能保证其转换的合理性。
- 对于TIMESTAMP类型的转换,其格式应与timstamp类型数据的书写形式一样。 若年月日时分秒之间的间隔用其它的字符来代替,则结果中的也一样发生了相应的改变。 若间隔符之外的其它格式发生了变化,则会出错。
- DATE类型、TIMESTAMP类型和TIMESTAMP WITH TIME ZONE类型在没有指定格式表达式的情况下,类型转换需要分别参照DATEFORMAT参数、TIMESTAMPFORMAT参数和TIMESTAMPTZFORMAT参数。 如果DATEFORMAT参数、TIMESTAMPFORMAT参数和TIMESTAMPTZFORMAT参数没有指定,则会参照DATEORDER和DATESTYLE进行匹配,如果匹配失败则报错。
数字格式元素:¶
| 例子 | 描述 | 举例 |
|---|---|---|
| 9,999 | 返回指定位置的逗号(逗号元素不能以数字格式模型开头) | SELECT TO_CHAR(1000,'9,999') FROM DUAL; |
| 99.99 | 返回一个小数点,它是指定位置的周期(数字模式中只能指定一个句点) | SELECT TO_CHAR(+0.1,'99.99') FROM DUAL; |
| $9999 | 返回带有前导美元符号的值 | SELECT TO_CHAR(1000,'$9999') FROM DUAL; |
| 0999 | 返回前导零(默认尾随零) | SELECT TO_CHAR(123,'0999') FROM DUAL; |
| RN | 以罗马数字大写形式返回值(值可以是1到3999之间的整数) | SELECT TO_CHAR(1235,'RN') FROM DUAL; |
| 9999S | 返回带有尾随减号(-/+)的负值(s 格式元素只能出现在数字 格式模型的第一个或最后一个位置) | SELECT TO_CHAR(-1234,'9999S') FROM DUAL; |
| XXXX | 返回指定位数的十六进制值(如果指定的数字不是整数,则其舍入为整数) | SELECT TO_CHAR(10.00,'XXXX') FROM DUAL; |
时间格式元素:¶
| 例子 | 描述 | 举例 |
|---|---|---|
| AD|BC | 有或无AD显示(神通目前没有实现公元前(BC)的表示) | SELECT TO_CHAR(SYSTIMESTAMP, 'ADYYYY') from DUAL; |
| AM|PM | 带或不带AM显示 | SELECT TO_CHAR(SYSTIMESTAMP, 'AMYYYY') from DUAL; |
| CC | 世纪,(2099和2001报表21,2000报表20) | SELECT TO_CHAR(SYSTIMESTAMP, 'CC') from DUAL; |
| D | 星期(1-7),注意:每星期的第1天是”星期日“ | SELECT TO_CHAR(SYSTIMESTAMP, 'D') from DUAL; |
| DAY | 日期 | SELECT TO_CHAR(SYSTIMESTAMP, 'DAY') from DUAL; |
| DD | 月日(1-31) | SELECT TO_CHAR(SYSTIMESTAMP, 'DD') from DUAL; |
| DDD | 年日(1-366) | SELECT TO_CHAR(SYSTIMESTAMP, 'DDD') from DUAL; |
| DY | 星期的缩写 | SELECT TO_CHAR(SYSTIMESTAMP, 'DY') from DUAL; |
| FF | 小数秒 | SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF') from DUAL; |
| HH | 每天(1-12)小时 | SELECT TO_CHAR(SYSTIMESTAMP, 'HH') from DUAL; |
| HH24 | 每天(0-23)小时 | SELECT TO_CHAR(SYSTIMESTAMP, 'HH24') from DUAL; |
| IW | 国际编码标准所定义的年历周(1-52或1-53) | SELECT TO_CHAR(SYSTIMESTAMP, 'IW') from DUAL; |
| IYYY|IYY|IY|I | 国际编码标准所定义的年份的4,3,2,1位数字 | SELECT TO_CHAR(SYSTIMESTAMP, 'IYYY') from DUAL; |
| J | 儒略日:公元前4712年1月1日以来的天数,用j指定的天数必须是整数 | SELECT TO_CHAR(SYSTIMESTAMP, 'J') from DUAL; |
| MI | 一分钟(0-59) | SELECT TO_CHAR(SYSTIMESTAMP, 'MI') from DUAL; |
| MM | 月份(01-12) | SELECT TO_CHAR(SYSTIMESTAMP, 'MM') from DUAL; |
| MON | 月份的缩写 | SELECT TO_CHAR(SYSTIMESTAMP, 'MON') from DUAL; |
| MONTH | 月份的名称 | SELECT TO_CHAR(SYSTIMESTAMP, 'MONTH') from DUAL; |
| Q | 一年的季度(1-4) | SELECT TO_CHAR(SYSTIMESTAMP, 'Q') from DUAL; |
| RM | 罗马数字月(I-XII) | SELECT TO_CHAR(SYSTIMESTAMP, 'RM') from DUAL; |
| SS | 秒(0-59) | SELECT TO_CHAR(SYSTIMESTAMP, 'SS') from DUAL; |
| SSSSS | 0点过后几秒(0-86399) | SELECT TO_CHAR(SYSTIMESTAMP, 'SSSSS') from DUAL; |
| WW | 一年中的第几周(1-53) | SELECT TO_CHAR(SYSTIMESTAMP, 'WW') from DUAL; |
| Y,YYY | 年,在这个位置加逗号 | SELECT TO_CHAR(SYSTIMESTAMP, 'Y,YYY') from DUAL; |
| YEAR | 年 | SELECT TO_CHAR(SYSTIMESTAMP, 'YEAR') from DUAL; |
| YYYY|YYY|YY|Y | 年后面的位数3位,2位,1位数字 | SELECT TO_CHAR(SYSTIMESTAMP, 'YYYY') from DUAL; |
返回值¶
与 text_expression 相同的类型
注解
ORACLE中关键字'SSSS'返回的是两次时间的秒数关键字'SSSSS'返回午夜后秒数
OSCAR中关键字'SSSS'和'SSSSS'都返回午夜后秒数
示例¶
示例1: 使用 TO_CHAR 转换
-- 使用 TO_CHAR 转换
SELECT TO_CHAR('2000-02-06 11:11:11'::TIMESTAMP, 'yyyy-mm-dd hh:mi:ss');
TO_CHAR(text) |
-------------------
2000-02-06 11:11:11|
总数目:1
SELECT TO_CHAR(123.12, '000.00');
TO_CHAR(text) |
-------------------
123.12 |
总数目:1
示例2: DATE类型使用 TO_CHAR 转换(不指定格式表达式)
set DATEFORMAT='YYYYMMDD HHMISS';
select to_char(to_date('20121212'));
TO_CHAR(text) |
-------------------
20121212 120000 |
总数目:1
select to_char(to_date('20121212 121212'));
TO_CHAR(text) |
-------------------
20121212 121212 |
总数目:1
select to_char(to_date('20121212 121212.123456'));
TO_CHAR(text) |
-------------------
20121212 121212 |
总数目:1
示例3: TIMESTAMP类型使用 TO_CHAR 转换(不指定格式表达式)
set TIMESTAMPFORMAT='YYYY-MM-DD HH24:MI:SS.FF';
select to_char(to_timestamp('2012-12-12'));
TO_CHAR(text) |
-------------------
2012-12-12 00:00:00|
.000000 |
总数目:1
select to_char(to_timestamp('2012-12-12 12:12:12'));
TO_CHAR(text) |
-------------------
2012-12-12 12:12:12|
.000000 |
总数目:1
select to_char(to_timestamp('2012-12-12 12:12:12.123456'));
TO_CHAR(text) |
-------------------
2012-12-12 12:12:12|
.123456 |
总数目:1
示例4: TIMESTAMP WITH TIME ZONE类型使用 TO_CHAR 转换(不指定格式表达式)
set TIMESTAMPTZFORMAT='';
select to_char(to_timestamp_tz('2012-12-12 12:12:12.123456 +9:00','YYYY-MM-DD HH24:MI:SS.FF TZ'));
TO_CHAR(text) |
-------------------
2012-12-12 11:12:12|
.123456 +08:00 |
总数目:1
select to_char(to_timestamp_tz('2012-12-12 12:12:12.123456 +9:00'));
TO_CHAR(text) |
-------------------
2012-12-12 11:12:12|
.123456 +08:00 |
总数目:1
示例5: varchar类型使用 TO_CHAR 转换(指定格式转换成16进制)
select to_char('10', 'XXXX');
TO_CHAR(text) |
-------------------
A |
总数目:1
select to_char('12.99', '99.99');
TO_CHAR(text) |
-------------------
12.99 |
总数目:1
示例6: interval类型使用 TO_CHAR 转换(指定格式)
select to_char(interval '2019-6' year(4) to month,'YEAR');
TO_CHAR(text) |
-------------------
2019 |
总数目:1
select to_char(interval '2019-6' year(4) to month,'YYYY:MM');
TO_CHAR(text) |
-------------------
2019:06 |
总数目:1
select to_char(interval '200' day(4));
TO_CHAR(text) |
-------------------
+000200 00:00:00 |
总数目:1
select to_char(interval '200' hour(4),'HH:MI');
TO_CHAR(text) |
-------------------
08:00 |
总数目:1
select to_char(interval '10' minute(2));
TO_CHAR(text) |
-------------------
+000000 00:10:00 |
总数目:1
select to_char(interval '10' minute(2),'MI.FF');
TO_CHAR(text) |
-------------------
10.000000 |
总数目:1
select to_char(interval '6 5:12:10.222' day(2) to second(4));
TO_CHAR(text) |
-------------------
+000006 05:12:10.22|
2 |
总数目:1
select to_char(interval '6 5:12:10.222' day(2) to second(4),'DD:HH:MI.FF');
TO_CHAR(text) |
-------------------
06:05:12.222000 |
总数目:1