ETL对日期、时间的操作,需用spark的日期函数来实现。
日期、时间生成函数
用途 | 函数 | 结果 | 生成当前的时间 | now() | 2021-08-21 14:43:09 | current_timestamp() | 生成今天的日期 | current_date() | 2021-08-21 | 生成当前时间戳 | unix_timestamp() | 1629528189 |
日期时间计算
用途 | 函数 | 举例 | 结果 | 增减日期时间 | [字段] +/- INTERVAL 1 YEAR/MONTH/WEEK/DAY/HOUR/MINUTE (中间数值不能引用其他字段) | '2021-07-30 15:48:08' - interval 1 year | 2020-07-30 15:48:08 | '2021-07-30 15:48:08' + interval 2 hour | 2021-07-30 17:48:08 | 计算未来日期 (时间部分不保留) | date_add([字段],数值) | date_add('2021-07-30 17:48:08',3) | 2021-08-02 | add_months([字段],数值) 数值为正值 | add_months('2021-07-30',1) | 2021-08-30 | 计算过去日期 (时间部分不保留) | date_sub([字段],数值) | date_sub('2021-07-30 17:48:08',3) | 2021-07-27 | add_months([字段],数值) 数值为负值 | add_months('2021-07-30',-1) | 2021-06-30 | 计算日期差 | datediff(endDate, startDate) 结果为整数 | datediff('2021-07-30', '2021-07-31') | -1 | 计算月份差 | months_between(endTime, startTime) 结果为浮点数 | months_between('2021-07-07 14:14:01', '2021-04-22 15:57:59') | 2.5138 | 计算分钟差 | *自定义函数: MINUTEDIFF() | MINUTEDIFF('2021-07-02 14:28:53', '2021-07-02 12:00:16') | 148 | 计算秒差 | *自定义函数: SECONDDIFF() | SECONDDIFF('2021-07-02 14:28:53', '2021-07-02 12:00:16') | 8917
|
日期date和时间timestamp的转换
用途 | 函数 | 举例 | 结果 | 将字符型日期转化为日期型 | to_date(date_str[, fmt]) 已经是标准格式时[, fmt]可省略,此时可与 date(date_str) 和cast(date_str as date) 通用 | to_date('2009-07-30 04:17:52') | 2009-07-30 | date('2009-07-30 04:17:52') | cast('2009-07-30 04:17:52' as date) | 将字符型时间日期转化为时间日期型 | to_timestamp(ts_str[, fmt]) 已经是标准格式时[, fmt]可省略,此时可与 timestamp(ts_str) 和cast(ts_str as timestamp) 通用 | to_timestamp('2016-12-31', 'yyyy-MM-dd') | 2016-12-31 00:00:00 | timestamp('2016-12-31') | cast('2016-12-31' as timestamp) | 将数值型、日期型等格式转化为字符型 | string(expr) | string('2021-07-30 15:48:08') | 2021-07-30 15:48:08 | CAST([字段] AS string) | cast('2021-07-30 15:48:08' as string) | 日期时间格式转化,结果一般为字符型 | date_format(timestamp, fmt) | date_format(now(), 'HH:mm:ss') | 22:04:50 | 将日期时间或者字符型日期时间转换为时间戳 | to_unix_timestamp([timeExp[, fmt]]) | to_unix_timestamp('2021/7/30 01:30 PM','yyyy/M/dd hh:mm a') | 1627623000 | unix_timestamp([timeExp[, fmt]]) 日期时间为标准格式时[, fmt] 可省略 | unix_timestamp('2021-07-30 13:30:00') | 1627623000 | 时间戳转为日期时间 | from_unixtime(unix_time[, fmt]) (已经自动转换为当前时区时间) | from_unixtime(1) | 1970-01-01 08:00:01 | 时区偏移转换 | from_utc_timestamp(timestamp, timezone) 用世界标准时间推算其他时区时间 | from_utc_timestamp('2021-08-08', 'Asia/Shanghai') | 2021-08-08 08:00:00 | from_utc_timestamp('2021-08-08 00:00:00', 'GMT+8') | to_utc_timestamp(timestamp, timezone) 用所给时区时间去推算世界标准时间 | to_utc_timestamp('2021-08-08 00:00:00', 'Asia/Shanghai'); to_utc_timestamp('2021-08-08 00:00:00', 'GMT+8') | 2021-08-07 16:00:00 |
|