SQL 方言通

首页 / 日期

TO_CHAR 日期转字符串

TO_CHAR 把日期或数值转成字符串。MaxCompute、Hologres 和 Spark 同名可用,其他引擎改用 DATE_FORMAT。最大的坑是格式符:MaxCompute 的 mm 表示月、mi 表示分钟,Java 风格的格式中 MM 才是月、mm 是分钟。

格式字符串可以用日期格式符转换器换算成各引擎的写法。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持TO_CHAR(date, format)格式符为 yyyy、mm、dd、hh、mi、ss,也支持 %Y、%m 这类写法。日期输入时 format 必填。date 为 NULL 时报错,format 为 NULL 时返回 NULL。也可以传入 BIGINT、DOUBLE 等数值,直接转成字符串。官方文档
Hologres支持TO_CHAR(ts, 'YYYY-MM-DD HH24:MI:SS')格式符沿用 PostgreSQL 风格。HH 默认是 12 小时制,24 小时制要写 HH24。默认只支持 1925~2282 年。官方文档
StarRocks需改写DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s')没有 TO_CHAR。DATE_FORMAT 使用 MySQL 风格格式符,%i 表示分钟。结果超过 128 字节时返回 NULL。官方文档
Doris需改写DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s')没有 TO_CHAR。DATE_FORMAT 使用 MySQL 风格格式符。官方文档
Hive需改写date_format(ts, 'yyyy-MM-dd HH:mm:ss')内置函数中没有 TO_CHAR。date_format 使用 Java 风格格式符。官方文档
Spark SQL支持to_char(expr, format)Spark 3.4.0 起提供。4.0 文档写明 expr 可以是日期时间,此时 format 使用 Java 风格格式符;更早的版本请按所用版本文档确认。也可以直接用 date_format。官方文档
Flink SQL需改写DATE_FORMAT(timestamp, 'yyyy-MM-dd HH:mm:ss')没有 TO_CHAR。DATE_FORMAT 的格式符兼容 Java SimpleDateFormat。官方文档

迁移注意事项

示例

把下单时间格式化为 yyyy-mm-dd hh:mi:ss

MaxCompute
SELECT TO_CHAR(order_time, 'yyyy-mm-dd hh:mi:ss') FROM orders;
Hologres
SELECT TO_CHAR(order_time, 'YYYY-MM-DD HH24:MI:SS') FROM orders;
StarRocks
SELECT DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') FROM orders;
Doris
SELECT DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') FROM orders;
Hive
SELECT date_format(order_time, 'yyyy-MM-dd HH:mm:ss') FROM orders;
Spark SQL
SELECT date_format(order_time, 'yyyy-MM-dd HH:mm:ss') FROM orders;
Flink SQL
SELECT DATE_FORMAT(order_time, 'yyyy-MM-dd HH:mm:ss') FROM orders;

同类函数

最后核对日期: