如何使用星期六作为星期结束日期来计算星期结束日期?
问题描述:
我有一个场景,我想计算周结束日期(给定一个日期),考虑周周末结束。我读了一些答案,但找不到解决方案,所以我在这里发布我的方法。希望它能帮助像我这样的人。如何使用星期六作为星期结束日期来计算星期结束日期?
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;
答
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;
请删除你的答案 – Yossi
你给实际的输入格式没有例子,和预期产出没有例子,例如*“给出一个字符串'2016-03-03 21:05'指向一个星期四,我期待一个字符串'2016-03-05'即下一个或相等的星期六”* –
而且你不给Hive版本 - 从V1.2.0开始,你有内置函数'next_day(string start_date,string day_of_week)'cf. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions –