SQL 方言通

首页 / 日期

UNIX_TIMESTAMP 日期转时间戳

UNIX_TIMESTAMP 把日期时间转换为距 1970-01-01 的秒数。各引擎都返回秒,但格式参数的写法、时区处理和超出范围时的结果不同,Hologres 要改用 EXTRACT(EPOCH FROM ...)。

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

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 UNIX_TIMESTAMP(date) 输入可以是 DATETIME、DATE、TIMESTAMP 或固定格式的字符串,返回秒级 BIGINT,小数秒会被丢弃。不支持格式参数。新类型系统下字符串需要先 CAST 为 DATETIME。 官方文档
Hologres 需改写 EXTRACT(EPOCH FROM ts) 日期函数中没有 UNIX_TIMESTAMP。EXTRACT 的 epoch 字段返回秒数,类型是 DOUBLE PRECISION。 官方文档
StarRocks 支持 UNIX_TIMESTAMP([date[, fmt]]) 返回 BIGINT。fmt 用 %Y-%m-%d 风格。早于 1970-01-01 或晚于 2038-01-19 11:14:07 时返回 0,结果受时区影响。 官方文档
Doris 支持 UNIX_TIMESTAMP([date[, fmt]]) fmt 用 %Y-%m-%d 风格。传入格式参数或带小数秒的输入时返回 DECIMAL;超出 1970~3001 年的范围时返回 0。结果受会话时区影响。 官方文档
Hive 支持 unix_timestamp(date[, pattern]) 返回秒级 bigint。不带参数取当前时间的写法从 Hive 2.0 起已不推荐,建议用 CURRENT_TIMESTAMP。 官方文档
Spark SQL 支持 unix_timestamp([timeExp[, fmt]]) Spark 1.5.0 起提供,默认格式 yyyy-MM-dd HH:mm:ss。另有 to_unix_timestamp。 官方文档
Flink SQL 支持 UNIX_TIMESTAMP(string1[, string2]) 默认格式 yyyy-MM-dd HH:mm:ss。不带参数时返回当前时间的秒数。 官方文档

迁移注意事项

示例

把下单时间转为秒级时间戳

MaxCompute
SELECT UNIX_TIMESTAMP(order_time) FROM orders;
Hologres
SELECT EXTRACT(EPOCH FROM order_time) FROM orders;
StarRocks
SELECT UNIX_TIMESTAMP(order_time_str, '%Y-%m-%d %H:%i:%s') FROM orders;
Spark SQL
SELECT unix_timestamp(order_time_str, 'yyyy-MM-dd HH:mm:ss') FROM orders;

同类函数

最后核对日期: