to_unix_timestamp:日期转 Unix 时间戳
速查结论
to_unix_timestamp(timeExp[, fmt]) 是 Spark SQL 中用于**将日期/时间表达式转为 Unix 时间戳(秒)**的函数。支持字符串(需指定格式)、日期和时间戳类型的输入。默认格式为 yyyy-MM-dd HH:mm:ss。
语法
to_unix_timestamp(timeExp[, fmt])
参数说明
| 参数 | 说明 |
|---|---|
timeExp | 日期/时间戳或字符串表达式 |
fmt | 可选,日期格式模式。仅当 timeExp 为字符串时生效。默认值 yyyy-MM-dd HH:mm:ss |
返回值:自 1970-01-01 00:00:00 UTC 以来的秒数(BIGINT 类型)。
Since: 1.6.0
示例
基础用法
-- 字符串 + 指定格式
SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');
-- 结果: 1460098800
-- 字符串 + 默认格式
SELECT to_unix_timestamp('2016-04-08 00:00:00');
-- 结果: 1460073600
不同格式的转换
-- 带时间的完整格式
SELECT to_unix_timestamp('2016-04-08 12:30:00', 'yyyy-MM-dd HH:mm:ss');
-- 结果: 1460098800
-- 斜杠分隔
SELECT to_unix_timestamp('2016/04/08', 'yyyy/MM/dd');
时间戳列直接转换
-- timeExp 为时间戳列时,fmt 参数被忽略
SELECT to_unix_timestamp(TIMESTAMP('2016-04-08 00:00:00'));
-- 结果: 1460073600
to_unix_timestamp vs unix_timestamp vs unix_seconds 对比
| 函数 | 输入类型 | 返回单位 | 特点 |
|---|---|---|---|
to_unix_timestamp(timeExp, fmt) | 字符串/日期/时间戳 | 秒 | 可指定字符串格式 |
unix_timestamp([timeExp, fmt]) | 无参/字符串/日期 | 秒 | 无参时返回当前时间戳 |
unix_seconds(timestamp) | 时间戳 | 秒 | 仅接受时间戳类型 |
-- to_unix_timestamp: 字符串转时间戳
SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');
-- 结果: 1460098800
-- unix_timestamp: 无参返回当前 Unix 时间戳
SELECT unix_timestamp();
-- 结果: 1587801600(示例值)
常见报错与避坑指南
格式不匹配导致返回 NULL
当 timeExp 是字符串且格式不匹配时,Spark 3.0+ 返回 NULL(而非报错)。
-- 格式不匹配:返回 NULL
SELECT to_unix_timestamp('2016-04-08', 'yyyy/MM/dd');
-- 结果: NULL('-' 和 '/' 不匹配)
-- 格式匹配输入
SELECT to_unix_timestamp('2016-04-08', 'yyyy-MM-dd');
-- 结果: 1460098800
时区影响
to_unix_timestamp 的结果受系统时区影响。同一时间戳在不同时区环境下可能返回不同的 Unix 时间戳值。
-- 查看当前时区
SET spark.sql.session.timeZone;
-- UTC 时间不受时区转换影响
SELECT to_unix_timestamp('2016-04-08 00:00:00', 'yyyy-MM-dd HH:mm:ss');
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
