select day_of_week
, date_var
, case when day_of_week = 'Sun' then date_var
when day_of_week = 'Sat' then date_sub(date_var, 6)
when day_of_week = 'Fri' then date_sub(date_var, 5)
when day_of_week = 'Thu' then date_sub(date_var, 4)
when day_of_week = 'Wed' then date_sub(date_var, 3)
when day_of_week = 'Tue' then date_sub(date_var, 2)
when day_of_week = 'Mon' then date_sub(date_var, 1)
else NULL
end as first_day_of_week_date
from (
select from_unixtime(timestamp, 'EEE') day_of_week
, from_unixtime(timestamp, 'yyyy-MM-dd') date_var
from db.table ) A
4条答案
按热度按时间svmlkihl1#
date_sub(m.invitationdate,pmod(datediff(m.invitationdate,'1900-01-07'),7))
这个表达式精确地解答了我的问题。当做,
鲍里斯
u5i3ibmn2#
从hive 1.2开始,您也可以这样做:
输出:
goqiplq23#
这是获取一周日期的第一天的最简单和最好的解决方案:
对于当前时间戳:
对于任何给定的日期或列:
qv7cva1a4#
是的,你不用写自定义项就可以做到这一点。如果您查看datetime函数下的配置单元文档,就会发现一个函数
from_unixtime()
它需要一个unix时间戳和一个字符串模式。在文档页面下面的几个函数中,有一个链接解释了可以在此函数中使用的不同模式。因此,从时间戳中,您可以提取一周中的某一天并相应地进行操作。示例数据:
前三个是2015年10月19日星期一,后三个是2015年10月16日星期五。
查询:
输出:
所以,对于今天,它返回昨天,也就是星期天,对于上周五,它返回上一个星期天,也就是11号。我假设“一周的第一天”是指星期天;如果不是,你可以把代码改成星期一。希望这有帮助。