戳藍色字關注我們喲!
如果HIVE表中的日期是以字元串形式進行存儲,那如何計算兩個日期相差天數呢?
問題陳述
實際應用中,我們經常用字元串的方式進行日期存儲,字元串雖然可以進行加減操作,但如果我們想得到兩個日期相差幾天,這種方式就無法得到我們想要的結果(如:20200301和20200229相差一天,但直接相減得到的是72)。
下方為某商店使用者最近一次購買日期?
user_id | last_dt |
---|---|
A00001 | 20200229 |
A00002 | 20200221 |
A00003 | 20200105 |
如果我們要計算每個使用者上次購買與目前相差幾天,以便對間隔較久的使用者進行精準營銷,該如何計算呢?
HIVESQL代碼
想要解決這個問題,可以通過字元串和時間戳互相轉換函數,結合時間差函數實作。先來看下完整語句,然後再具體講解各函數含義?
datediff(from_unixtime(unix_timestamp('20200131','yyyyMMdd'),'yyyy-MM-dd'),
from_unixtime(unix_timestamp(last_dt,'yyyyMMdd'),'yyyy-MM-dd'))
複制
—>unix_timestamp('日期字元串',‘pattern’)
這個函數表示将指定格式的日期轉換為時間戳。unix_timestamp('20200131','yyyyMMdd') 表示将‘20200131’轉換為時間戳,得到結果:1580428800。
—>from_unixtime('時間戳','pattern')
這個函數表示将時間戳轉換為指定格式的日期, from_unixtime(1580428800,'yyyy-MM-dd') 則得到結果 '2020-01-31'
—>datediff('data1','data2')
這個函數表示計算兩個時間的差, datediff('2020-01-31','2020-02-29') 得到結果:1。