2013-07-09 32 views

回答

2

你可以使用由Nexr提供的last_day(dateString) UDF。它返回基於日期字符串的月份的最後一天,格式爲yyyy-MM-dd HH:mm:ss模式。

Example: 
SELECT last_day('2003-03-15 01:22:33') FROM src LIMIT 1; 
2003-03-31 00:00:00 

你需要從他們的Github Repository把它和建設。他們的wiki頁面包含如何在Hive上構建和使用它的所有信息。

HTH

-2

我認爲你可以在你的蜂巢查詢TO_DATE(字符串時間戳)使用UDF。例如: - 返回時間戳字符串的日期部分:to_date(「1970-01-01 00:00:00」)=「1970-01-01」。現在,你需要寫一個UDF說(即LASTDAY)將實施以下內容: -

Date today = new Date(); 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTime(today); 

    calendar.add(Calendar.MONTH, 1); 
    calendar.set(Calendar.DAY_OF_MONTH, 1); 
    calendar.add(Calendar.DATE, -1); 

    Date lastDayOfMonth = calendar.getTime(); 

    DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    return sdf.format(lastDayOfMonth) 

現在,您的UDF將是這樣的: -

select lastDay(to_date(string timestamp)) from xxx; 

我希望這將有助於你的理由

0

類似下面的可以給你一些啓示。該代碼將爲您提供上個月的最後一天。你可以通過它來獲得你想要的任何月份的最後一天。

date_sub(concat(from_unixtime(unix_timestamp(), 'yyyy-MM'), '-01'), 1) 
0
select 
CASE WHEN month(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')) IN(4,6,9,11) 
THEN 
date_add((FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')),30 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))) 
WHEN month(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')) IN(1,3,5,7,8,10,12) 
THEN 
date_add((FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')),31 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))) 
WHEN month(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')) = 2 and day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))=28 
THEN 
date_add((FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')),28 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))) 
WHEN month(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')) = 2 and day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))=29 
THEN 
date_add((FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd')),29 - day(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))) 
END as calc_date from table_name 
limit 2; 
+0

請根據http://stackoverflow.com/editing-help格式化您的代碼 – Aderstedt

2

如果你想避免以下自定義的UDF是另一種解決方案: to_date(date_sub(add_months(concat(from_unixtime(unix_timestamp('2015-07-28','yyyy-MM-dd'), 'yyyy-MM'),'-01'),1),1))

0

https://github.com/manojkumarvohra/day-extremes

你可以使用這個項目獲得firstday/LASTDAY爲多種單位:天,一週,一個月,一個季度,一年。

它接受輸入日期作爲字符串,時間戳,日期在各種有效格式和各種有效格式輸出。

(可選)您可以提及可選的時間戳作爲間隔添加。

用法

FIRST_DAY_OF(單位,日期,input_format [可選],OUTPUT_FORMAT [可選],include_interval [可選],間隔[可選])

LAST_DAY_OF(單位,日期,input_format [可選], output_format [optional],include_interval [optional],interval [可選])

2

從Hive 1.1.0開始,last_day(string date)函數可用。

last_day(string date)

返回的日期所屬月份的最後一天。日期是格式爲'yyyy-MM-dd HH:mm:ss'或'yyyy-MM-dd'的字符串。日期的時間部分被忽略。

相關問題