数仓 SQL 函数对照

首页 / 日期

DATE_FORMAT 日期格式化

DATE_FORMAT 把日期或时间转换为指定格式的字符串。七个引擎用了四套格式符,同样写 mm,有的表示月,有的表示分钟,迁移时最容易出错。

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

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 DATE_FORMAT(date, format) 返回 STRING。默认模式下分钟写 mi,写 mm 会输出月份;开启 Hive 兼容模式后分钟写 mm,写 mi 返回 NULL。DATE 和 STRING 输入需要开启 Hive 兼容模式。 官方文档
Hologres 需改写 TO_CHAR(timestamp, 'YYYY-MM-DD HH24:MI:SS') 文档中没有 DATE_FORMAT,用 TO_CHAR 代替。格式符是 PostgreSQL 风格,HH 默认是 12 小时制,24 小时制要写 HH24。 官方文档
StarRocks 支持 DATE_FORMAT(datetime, '%Y-%m-%d %H:%i:%s') MySQL 风格格式符,%m 是月,%i 是分钟。需要 yyyy-MM-dd 这类 Joda 风格时用 jodatime_format。结果超过 128 字节时返回 NULL。 官方文档
Doris 支持 DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s') MySQL 风格格式符,%m 是月,%i 是分钟。文档还列出 yyyyMMdd、yyyy-MM-dd 和 yyyy-MM-dd HH:mm:ss 三种格式。结果超过 128 字节时返回 NULL。 官方文档
Hive 支持 date_format(ts, pattern) Hive 1.2.0 起提供,输入可以是 date、timestamp 或 string。 官方文档
Spark SQL 支持 date_format(timestamp, fmt) Spark 1.5.0 起提供。 官方文档
Flink SQL 支持 DATE_FORMAT(timestamp, format) 按格式字符串把 TIMESTAMP 转换为字符串。 官方文档

迁移注意事项

示例

格式化为 年-月-日 时:分:秒

MaxCompute
SELECT DATE_FORMAT(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;
Spark SQL
SELECT date_format(order_time, 'yyyy-MM-dd HH:mm:ss') FROM orders;

同类函数

最后核对日期: