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 |
+-------+