2016-03-03 4 views
0

У меня был сценарий, где я хотел рассчитать дату окончания недели (с учетом даты), учитывая, что конец недели в субботу. Я прочитал несколько ответов, но не смог найти решение, поэтому я размещаю свой подход здесь. Надеюсь, это поможет кому-то вроде меня.Как рассчитать дату окончания недели в улье, используя субботу в качестве даты окончания недели?

select 
TransactionDateTime, 
from_unixtime(unix_timestamp(TransactionTime),'u') as wkday, 
date_add (TransactionDateTime, 
case when from_unixtime(unix_timestamp(TransactionTime),'u')=7 then 6 
when from_unixtime(unix_timestamp(TransactionTime),'u')=1 then 5 
when from_unixtime(unix_timestamp(TransactionTime),'u')=2 then 4 
when from_unixtime(unix_timestamp(TransactionTime),'u')=3 then 3 
when from_unixtime(unix_timestamp(TransactionTime),'u')=4 then 2 
when from_unixtime(unix_timestamp(TransactionTime),'u')=5 then 1 
when from_unixtime(unix_timestamp(TransactionTime),'u')=6 then 0 
end) as UsageWkEndDt 
from TransTable; 
+0

Пожалуйста, удалите свой ответ – Yossi

+0

Вы не дают пример фактического входного формата, и не пример ожидаемого результата, например * «учитывая строку« 2016-03-03 21:05 », которая указывает на четверг, я ожидаю, что строка« 2016-03-05 », то есть следующая или суббота» * –

+0

И вы не дадите Версия Hive - с V1.2.0 у вас есть встроенная функция 'next_day (строка start_date, строка day_of_week)' cf. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions –

ответ

0
select 
TransactionDateTime, 
from_unixtime(unix_timestamp(TransactionTime),'u') as wkday, 
date_add (TransactionDateTime, 
case when from_unixtime(unix_timestamp(TransactionTime),'u')=7 then 6 
when from_unixtime(unix_timestamp(TransactionTime),'u')=1 then 5 
when from_unixtime(unix_timestamp(TransactionTime),'u')=2 then 4 
when from_unixtime(unix_timestamp(TransactionTime),'u')=3 then 3 
when from_unixtime(unix_timestamp(TransactionTime),'u')=4 then 2 
when from_unixtime(unix_timestamp(TransactionTime),'u')=5 then 1 
when from_unixtime(unix_timestamp(TransactionTime),'u')=6 then 0 
end) as UsageWkEndDt 
from TransTable; 
Смежные вопросы