网上查询资料如下:
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不支持,或者其他原因,我未能按照网上提供的方式,执行得到想要的结果。如果要是知道原因的,还望告知一声。