获取连续的日期
假如我们需要获取2020-07-15至2020-07-21间所有的日期,可以像这样写
SELECT
pos,
date_add( start_date, pos ) dd
FROM
( SELECT '2020-07-15' AS start_date, '2020-07-21' AS end_date ) temp
lateral VIEW
posexplode ( split ( space( datediff( end_date, start_date ) ), '' ) ) t
AS pos, val
下面简单解释下这个sql,首先看下posexplode函数中包含的部分
split ( space( datediff( '2020-07-21', '2020-07-15' ) ), '' )
- 1
datediff函数计算两个日期间相差的天数(这里返回6)
space函数会根据传入的数字返回对应长度的空格(这里返回长度为6的空字符串)
split函数将字符串按指定分隔符进行拆分(这里返回如下数组)
[" "," "," "," "," "," ",""]
- 1
有了上面的数组我们再通过posexplode函数将列转行,并获取行号
最后通过date_add与行号获取一个递增的日期