TO_CHAR
📄字数 1.6K
👁️阅读量 加载中...
功能描述
将日期、时间、时间戳、时间间隔类型转换为格式化字符串。
语法格式
sql
TO_CHAR(expr[, fmt])
输入参数
expr
:要转换的值,日期
、时间
、时间戳
、时间间隔
类型,或能隐式转换为上述类型的其他类型。fmt
:格式串,VARCHAR
类型,如:YYYY-MM-DD
。如果省略fmt
,则根据输入参数expr
的类型,输出结果的格式存在差异,详见 默认格式的输出结果。
参数支持的类型
第一个参数 | 第二个参数 |
---|---|
DATE | - |
DATE | CHAR |
DATETIME | - |
DATETIME WITH TIME ZONE | - |
DATETIME WITH TIME ZONE | CHAR |
DATETIME | CHAR |
INTERVAL DAY | - |
INTERVAL DAY TO HOUR | - |
INTERVAL DAY TO MINUTE | - |
INTERVAL DAY TO SECOND | - |
INTERVAL HOUR | - |
INTERVAL HOUR TO MINUTE | - |
INTERVAL HOUR TO SECOND | - |
INTERVAL MINUTE | - |
INTERVAL MINUTE TO SECOND | - |
INTERVAL MONTH | - |
INTERVAL SECOND | - |
INTERVAL YEAR | - |
INTERVAL YEAR TO MONTH | - |
TIME | - |
TIME WITH TIME ZONE | - |
TIME WITH TIME ZONE | CHAR |
TIME | CHAR |
支持的格式说明
格式(不区分大小写) | 描述 |
---|---|
YY/YYY/YYYY | 年 |
MM | 月 |
DD/DDD | 日 |
HH/HH24 | 小时 |
MI | 分钟 |
SS[SSSSSS] | 秒(精度可选) |
提示
- 因
NULL
无具体的类型,当第一个参数为NULL
时,会产生异常E10100 候选函数出现多义性
,需要手动为参数指定具体的类型,如:TO_CHAR(NULL::DATETIME)
。 -
表示无输入参数。
输出结果
返回 VARCHAR
类型,任意输入参数为 NULL
时,输出结果为 NULL
。
默认格式的输出结果
第一个参数的类型 | 输出结果的格式 |
---|---|
DATE | 客户端连接会话上的时间格式 |
DATETIME | 客户端连接会话上的时间格式 |
DATETIME WITH TIME ZONE | 客户端连接会话上的时间格式 |
INTERVAL DAY | 按SQL标准输出 |
INTERVAL DAY TO HOUR | 按SQL标准输出 |
INTERVAL DAY TO MINUTE | 按SQL标准输出 |
INTERVAL DAY TO SECOND | 按SQL标准输出 |
INTERVAL HOUR | 按SQL标准输出 |
INTERVAL HOUR TO MINUTE | 按SQL标准输出 |
INTERVAL HOUR TO SECOND | 按SQL标准输出 |
INTERVAL MINUTE | 按SQL标准输出 |
INTERVAL MINUTE TO SECOND | 按SQL标准输出 |
INTERVAL MONTH | 按SQL标准输出 |
INTERVAL SECOND | 按SQL标准输出 |
INTERVAL YEAR | 按SQL标准输出 |
INTERVAL YEAR TO MONTH | 按SQL标准输出 |
TIME | HH24:MI:SSSSS |
TIME WITH TIME ZONE | HH24:MI:SSSSS+TZH:TZM |
提示
time_format
(客户端连接会话上的时间格式),默认时间格式为:YYYY-MM-DD HH24:MI:SS
,时间格式的详细信息请参考会话参数 TIME_FORMAT。time_format
的值会影响参数的解析,如果将time_format
设置成YYYY-MM-DD
,但是参数的类型为DATETIME
,函数会抛出值异常的错误。所以,time_format
的值要和参数的格式一致。TIME
和TIME WITH TIME ZONE
类型的值只精确到毫秒。
示例
sql
-- 按格式 'DD MM YYYY HH24:MI:SSSSS' 返回字符串
SQL> SELECT TO_CHAR(NOW(), 'DD MM YYYY HH24:MI:SSSSS') FROM dual;
+-------------------------+
| EXPR1 |
+-------------------------+
| 10 07 2025 10:22:09.194 |
+-------------------------+
-- 原样返回 INTERVAL YEAR TO MONTH 类型的值
SQL> SELECT TO_CHAR(INTERVAL '1-10' YEAR TO MONTH) FROM dual;
+-------+
| EXPR1 |
+-------+
| 1-10 |
+-------+