我从我的表“tweets”中选择日期为
select to_date(created_at) from tweets;
给了我日期,
2011-09-28
2011-09-25
2011-09-25
2011-09-24
但是,我需要将日期转换为星期几格式, 周一为1,周二为2,依此类推。
我如何实现这一目标?
编辑: 我想我可以获得样品日期的日期,
select from_unixtime(unix_timestamp('2014-01-12','yyyyMMdd'),'u');
如何在原始查询中加入此内容?
答案 0 :(得分:9)
date_format(..., 'u')
给出星期一= 1,依此类推。
另一个答案使用' w'这给出了一年中的一周,这不是你想要的。
原始查询变为:
SELECT date_format(created_at, 'u') from tweets
;
有关所有选项,请参阅java docs。
答案 1 :(得分:3)
如果你有hive 1.2这应该有用。它在语言手册中。我正在运行配置单元0.13所以我无法测试date_format函数,但它应该给你一个1 - 7的整数;
select cast(date_format('2015-04-06'),'w' as int) as DOW from table;
我在hive 0.13上测试了这个:
select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'u') as
DOW from table;
这导致1,所以它似乎有效。
如果上述失败,可以使用的其他选项:
select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'EEEE') as
DOW from table;
这将返回'Monday'
此外
select from_unixtime(unix_timestamp('2015-07-06','yy-MM-dd'),'EEE') as
DOW from table;
将返回'Mon'
然后你可以简单地做一个何时改为整数的情况。
case when DOW = 'Mon' then 1
when DOW = 'Tue' then 2
-- ...
when DOW = 'Sat' then 6
else 7
end as day_of_week
不要使用它:
select pmod(datediff('2015-07-06','1970-01-04'),7) + 1 as DOW from table;
这返回2,这是不正确的,并已被其他人建议。