以下是基于 Apache Spark SQL 官方文档及搜索结果总结的时间、日期和时间戳相关核心函数,按功能分类整理:
一、获取当前时间
-
current_date()
返回当前日期(格式:yyyy-MM-dd
)。SELECT current_date(); -- 2025-03-26
-
current_timestamp()
或now()
返回当前时间戳(格式:yyyy-MM-dd HH:mm:ss.SSS
)。SELECT current_timestamp(); -- 2025-03-26 14:30:45.123
二、提取时间字段
-
提取年/月/日等
year(date)
:提取年份month(date)
:提取月份(1-12)day(date)
或dayofmonth(date)
:提取日期(1-31)hour(timestamp)
:提取小时(0-23)minute(timestamp)
:提取分钟(0-59)second(timestamp)
:提取秒(0-59)。
SELECT year('2025-03-26'); -- 2025
-
周/季度相关
weekofyear(date)
:返回 ISO 周数(周一为一周起始)。quarter(date)
:返回季度(1-4)。dayofweek(date)
:返回星期(1=周日,7=周六)。
三、时间格式转换
-
from_unixtime(unix_time, format)
将 Unix 时间戳(秒)转为字符串,默认格式yyyy-MM-dd HH:mm:ss
。HH
表示 24 小时制,hh
为 12 小时制。
SELECT from_unixtime(1743019200, 'yyyy-MM-dd HH:mm:ss'); -- 2025-03-26 12:00:00
-
to_date(string, format)
将字符串转为日期类型,默认格式yyyy-MM-dd
。SELECT to_date('2025/03/26', 'yyyy/MM/dd'); -- 2025-03-26
-
to_timestamp(string, format)
将字符串转为时间戳类型,默认格式yyyy-MM-dd HH:mm:ss
。
四、时间计算
-
日期加减
date_add(start_date, days)
:日期加 N 天date_sub(start_date, days)
:日期减 N 天add_months(start_date, num_months)
:日期加 N 月。
SELECT date_add('2025-03-26', 7); -- 2025-04-02
-
时间差计算
datediff(end_date, start_date)
:返回两个日期间的天数差months_between(end_date, start_date)
:返回两个日期间的月数差(含小数)。
SELECT datediff('2025-04-01', '2025-03-26'); -- 6
-
首尾日期
last_day(date)
:返回当月最后一天next_day(date, day_of_week)
:返回下一个指定星期几的日期(如'MON'
)。
SELECT last_day('2025-03-26'); -- 2025-03-31
五、时间截断与格式化
-
trunc(date, unit)
按单位(year
/month
/day
)截断日期,其他部分置为默认值。SELECT trunc('2025-03-26', 'MONTH'); -- 2025-03-01
-
date_trunc(unit, timestamp)
按单位截断时间戳,如HOUR
会保留小时,分钟以下置零。SELECT date_trunc('HOUR', '2025-03-26 14:30:45'); -- 2025-03-26 14:00:00
-
date_format(timestamp, format)
将时间戳格式化为指定字符串(格式符与 Java 兼容,如yyyy-MM-dd HH:mm:ss
)。SELECT date_format(now(), 'yyyy年MM月dd日'); -- 2025年03月26日
六、时间戳与 Unix 时间转换
-
unix_timestamp()
返回当前 Unix 时间戳(秒)。SELECT unix_timestamp(); -- 1743019200
-
from_unixtime()
与to_unix_timestamp()
双向转换 Unix 时间戳与日期字符串。
七、UTC 时间处理
-
to_utc_timestamp(timestamp, timezone)
将指定时区时间转为 UTC 时间。SELECT to_utc_timestamp('2025-03-26 14:30:45', 'Asia/Shanghai'); -- 2025-03-26 06:30:45 UTC
-
from_utc_timestamp(timestamp, timezone)
将 UTC 时间转为指定时区时间。
八、时间窗口函数
window(time_column, window_duration, slide_duration)
按时间窗口聚合数据,支持微秒级精度(如10 minutes
)。SELECT window(event_time, '5 minutes') AS window, COUNT(*) FROM events GROUP BY window;