【hive】求日期是星期幾


在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'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM