首页 / 日期
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 转换为字符串。 | 官方文档 |
迁移注意事项
- 四套格式符不能混用:Java 风格写 yyyy-MM-dd HH:mm:ss,MySQL 风格写 %Y-%m-%d %H:%i:%s,PostgreSQL 风格写 YYYY-MM-DD HH24:MI:SS,MaxCompute 默认模式写 yyyy-mm-dd hh:mi:ss。
- 从 MaxCompute 默认模式迁出时,hh:mi:ss 要改成目标引擎的分钟写法。原样照搬到 Spark 或 Flink,mi 不会被识别为分钟。
- Hologres 的 HH 默认是 12 小时制,下午的时间会少 12 小时,必须写 HH24。
- StarRocks 和 Doris 中 %m 是月、%i 是分钟,写成 %M 会输出英文月份名。
示例
格式化为 年-月-日 时:分:秒
SELECT DATE_FORMAT(order_time, 'yyyy-mm-dd hh:mi:ss') FROM orders;SELECT TO_CHAR(order_time, 'YYYY-MM-DD HH24:MI:SS') FROM orders;SELECT DATE_FORMAT(order_time, '%Y-%m-%d %H:%i:%s') FROM orders;SELECT date_format(order_time, 'yyyy-MM-dd HH:mm:ss') FROM orders;