问答 查看内容
返回列表

ETL里怎么做时间匹配?

186 1
发表于 2024-10-25 11:35:57 | 查看全部 阅读模式
ETL里怎么做时间对比、比较、匹配当前时间/日期?

评论1

观小析楼主Lv.1 发表于 2024-10-25 11:39:05 | 查看全部


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


回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

微信服务号
联系我们
电话:400-880-0750
邮箱:hello@guandata.com
Copyright © 2001-2024 观远社区 版权所有 All Rights Reserved. 浙 ICP 备15006424号-3
去回复 去发帖 返回顶部
快速回复 返回顶部 返回列表