一. 基本使用
函数格式:
pmod(int a, int b)
pmod(double a, double b)
返回a除b的余数的绝对值。
实例1:
select datediff('2018-01-02','2018-01-01') //1
select pmod(datediff('2018-01-02','2018-01-01') + 1,7) //2
case
when pmod(datediff(ref_date,'2018-01-01') + 1,7) = 2 then concat(ref_date,'(周二)')
when pmod(datediff(ref_date,'2018-01-01') + 1,7) = 3 then concat(ref_date,'(周三)')
when pmod(datediff(ref_date,'2018-01-01') + 1,7) = 4 then concat(ref_date,'(周四)')
when pmod(datediff(ref_date,'2018-01-01') + 1,7) = 5 then concat(ref_date,'(周五)')
when pmod(datediff(ref_date,'2018-01-01') + 1,7) = 6 then concat(ref_date,'(周六)')
else concat(ref_date,'(周日)') end ref_date,
二. 使用pmod函数实现dayofweek函数功能
dayofweek在hive2.2.0开始支持,低版本的hive原生未提供dayofweek函数(获取一个日期是星期几的方法),所以只有我们自己编写udf函数提供,udf就不说了,在这里给出了一个使用hive原生函数获取星期几的技巧。
pmod(datediff('${date}', '1920-01-01') - 3, 7)
'${date}'表示给的日期。
输出的结果为0-6的数,分别表示 日,一,二 … 六。
2016-01-01 5
2016-01-02 6
2016-01-03 0
如果想让周一到周六对应数字1-7只需要将查询出来的数据进行判断就行了,如下:
IF(pmod(datediff('${date}', '1920-01-01') - 3, 7)='0', 7, pmod(datediff('${date}', '1920-01-01') - 3, 7))
2016-01-01 5
2016-01-02 6
2016-01-03 7
参考于:
https://blog.csdn.net/weixin_38750084/article/details/103032383
https://blog.csdn.net/weixin_30713953/article/details/98408307