Hive 的内置函数 datediff
日期操作函数是对两个日期进行相减差值,计算两个时间的差值,并转换成指定的单位,如:天、小时、分等时间支持的单位。
语法说明
语法
DATEDIFF(enddate, startdate)
说明
函数参数说明如下:
enddate
:被减的日期内容,一般是更大的那个日期数据,若输入为 string 类型会隐式转换为 datetime 类型后参与运算,其它类型抛异常。startdate
:对比的日期内容,一般是更小的那个日期数据,若输入为 string 类型会隐式转换为 datetime 类型后参与运算,其它类型抛异常。
参数日期的格式需要是 'yyyy-MM-dd' 或 'yyyy-MM-dd HH:mm:ss',其中时间的信息计算时会忽略。
返回值说明如下:
- 返回值:返回时间差值,即结束日期减去开始日期的天数,int 类型。
如果结束日期比起始日期小,则返回负数。
示例如下:
DATEDIFF('2021-10-28', '2021-10-26') = 2
若 start = '2020-12-31 23:59:59',end = '2021-01-01 00:00:00':
DATEDIFF(end, start) = 1
除了上面的日期格式,它实际上还支持 2022-9-3 这种格式。如下例子:
hive> SELECT DATEDIFF('2022-10-15', '2022-9-3')
42
如果我的日期是 2022/10/15 这样的,该这么办?这时候可以用 hive 的 REGEXP_REPLACE
这个内置函数。示例如下:
hive> SELECT DATEDIFF(REGEXP_REPLACE('2022/10/15', "/", "-"), REGEXP_REPLACE('2022/9/3', "/", "-"))
42
常用例子
计算日期对应的星期数
利用 pmod
和 datediff
函数进行操作,示例如下:
pmod(datediff(dp, '2012-01-01'), 7)
返回值为 “0-6”(“0-6” 分别表示“星期日-星期六”)。