在Hive原生版本中,目前並沒有返回星期幾的函數。
除了利用java自己編寫udf外,也可以利用現有hive函數實現。
方法格式:
pmod(datediff('#date#', '任意年任意一個星期日的日期'), 7)
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的余數
如:2012-01-01剛好是星期日。
pmod(datediff('#date#', '2012-01-01'), 7)
返回值:int,“0-6”(“0-6”分別表示“星期日-星期六”)
注意:這里的日期必須是'string'類型的格式為'yyyy-MM-dd',因為datediff()函數對參數的要求
補充:當后邊的日期不是周日的時候,我們可以對datediff結果進行加減到周日即可
例如:2018-01-01是周一,我們可以在datediff基礎上+1/-6.
為什么是周一要+1呢,因為對於一整周的時間是少了一天.
變通一下,一樣可以達到相同的目的:
select pmod(datediff('2018-06-04', '2018-01-01') - 6, 7);
select pmod(datediff('2018-06-04', '2018-01-01') + 1, 7);
附贈:bigint類型的日期轉換成string(yyyy-MM-DD)類型的日期
from_unixtime(unix_timestamp(cast(20180707 as string),'yyyymmdd'),'yyyy-mm-dd')
20180707 -> '2018-07-07'