【发布时间】:2016-06-16 22:21:54
【问题描述】:
我有一个场景,我想计算周末的结束日期(给定一个日期),考虑到周六的周末。我阅读了一些答案,但找不到解决方案,所以我在这里发布我的方法。希望它可以帮助像我这样的人。
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;
【问题讨论】:
-
请删除你的答案
-
你没有给出实际输入格式的例子,也没有给出预期输出的例子,例如" 给定一个指向星期四的字符串 '2016-03-03 21:05',我希望字符串 '2016-03-05' 即下一个或相等的星期六"
-
而且你没有提供 Hive 版本——从 V1.2.0 开始,你有内置函数
next_day(string start_date, string day_of_week)cf。 cwiki.apache.org/confluence/display/Hive/… -
关于您对预期日期格式的疑问 - 标准日期时间格式 (yyyy-MM-dd hh:mm:ss) 甚至标准日期 (yyyy-MM-dd) 都将在此处接受。如果我们有一些不同的格式,我们可以使用 hive 中的 unix_timestamp 方法轻松处理。这种方法适用于 Hive 1.0.0,因为最新 EMR 版本 (emr-4.3.0) 支持此版本
标签: sql date hadoop hive dayofweek