hive时间函数沉淀一

101 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

上一篇讲述了很多时间相关的函数,也介绍了hive中内置的一些时间函数,继续接上一篇来讲讲时间函数的相关知识,首先把没讲完的hive内置时间函数介绍一下。

废话不多说直接进入正题吧。

date_sub()函数

date_sub(string startdate,int days)

在入参的时间基础上减少天数,获得新的时间,这里的days可以是正数也可以是负数,如果是负数,那功能其实跟上面的date_add()函数是类似的。

同样的此处输入的时间必须是yyyy-MM-dd这样的格式,否则获得结果是null。

datediff()函数

datediff(string enddate,string startdate)

之前文章已经介绍过的,大家可以回看一下。这里简单说明就是输入参数有两个,开始时间和结束时间,该函数就是获取这两个时间相差的天数,可以是正数可以是负数的。

常见需求有获取前7天内创建的订单数据,那么就可以增加筛选条件为当前时间和订单创建时间得到相差的天数小于等于7这个条件就可以了。

下面我会着重再介绍的时间函数更偏向实际应用,都是在日常开发中沉淀下来的具体实践方案,欢迎补充。

1、判断是否休息时间

每天按照工作时长是从9点到晚上8点的正常工作时间,那么要获取休息时间就是下面这样处理。

先获取指定时间的小时位的数,然后判断是否在非工作时间内,增加一个新字段作为判断该时间是否为休息时间的字段is_rest_time,可以是在临时表中处理,如果该判读用的比较频繁,也可以直接增加字段到表中。


,if(hour(create_time) in ('20','21','22','23','0','1','2','3','4','5','6','7','8','9'),1,0)  as is_rest_time -- 是否休息时间

\