2014-04-10 43 views
12

我正在尋找解決方法或蜂巢日期功能,使該星期的一天,蜂巢日期函數來實現

Sunday - 1 
Monday - 2 
Tuesday - 3 
Wednesday - 4 
Thursday - 5 
Friday - 6 
Saturday - 7 

要求詳細:我正在尋找這需要時間的函數字符串(YYYYMMDD)作爲輸入,並根據上表輸出星期幾。

+0

你需要寫UDF這一點。 你能解釋你的要求嗎?此外,該列的數據類型是什麼? –

回答

-3

正如我所說的,你需要編寫一個UDF,它將接受一個字符串作爲參數並返回一個字符串。 的UDF裏面你需要做以下步驟:

1)解析使用的SimpleDateFormat(年月日)的輸入字符串

2)使用下面的代碼來獲得星期:

Calendar c = Calendar.getInstance(); 
c.setTime(yourDate); 
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); 

3)在case語句使用此一週中的某天值,讓您平日字符串並返回該字符串。

希望這有助於... !!!

+0

感謝它有幫助 – user3279189

+1

完全沒有必要爲此編寫自己的UDF。 – swdev

8

select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table

  • 任意開始日期挑(1900年1月7日)
  • 計算一週的MOD7天(加1開始以1而不是零)
34

考慮使用from_unixtime(your date,'u') - 這將返回從Monday=1開始的每週數。 如果您的日期是不是在unixtime格式,你可以改用以下內容:

from_unixtime(unix_timestamp('20140112','yyyyMMdd'),'u') 

看到:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html簡單的日期格式的文檔。

+0

它僅適用於Java 7,它在Java 6上失敗(http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html中沒有'u'選項)。 –

+2

此外,如果你想要工作日的文本版本(即「星期一」,「星期二」等),你可以用'E'代替''''' – willwest

+1

星期一是1,星期日是7 –

4

您現在可以使用DATE_FORMAT(蜂巢1.2):

hive> select date_format('2016-12-01' ,'u'); 
OK 
4