hive判断周几进行SQL统计数据

网上查询资料如下:

hive返回星期几的方法:pmod(datediff('#date#', '2012年任意一个星期日的日期'), 7) 。2012-01-01刚好是星期日,大家可以记忆为:

方法:pmod(datediff('#date#', '2012-01-01'), 7)  
返回值:int
说明:1、返回值为“0-6”(“0-6”分别表示“星期日-星期六”);2、需要注意pmod和 datediff 函数的使用方法.

解析:

1、datediff 是两个日期相减的函数,hive日期函数可以见附录:

日期相减函数:datediff
语法:datediff(string enddate, string startdate)
返回值: int
说明: 返回两个时间参数的相差天数。

2、 pmod 是正取余函数:

正取余函数 : pmod
语法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
说明: 返回正的a除以b的余数

特殊说明:

这个方法也不是唯一的方法,只是利用了datediff 和pmod函数的特点,组合使用而出。内部牛人分享的方法也可以达到相同的目的:

pmod(datediff(#date#, '1920-01-01') - 3, 7)

#date#表示给的日期。

经过测试结果如下:

hive> select pmod(datediff('#date#','2012-01-01'),7);
OK
NULL
Time taken: 0.118 seconds, Fetched: 1 row(s)

返回结果竟然是null,可以执行。

于是采用改进方式如下:

hive> select current_date,date_sub(current_date,6),pmod(datediff(current_date,'1970-01-05'),7)+1;
OK
2018-08-29	2018-08-23	3
Time taken: 0.166 seconds, Fetched: 1 row(s)

通过结果,可以看出20180829确实是周三。最终采用的方案也就是上面这个。

可能因为我这边的hive不支持,或者其他原因,我未能按照网上提供的方式,执行得到想要的结果。如果要是知道原因的,还望告知一声。

猜你喜欢

转载自blog.csdn.net/Burgess_Lee/article/details/82179261
今日推荐