仅过滤工作日,并仅在蜂巢中过滤周末

时间:2018-04-18 06:08:32

标签: mysql date hadoop hive

我有一个名为' timestamp '的列。我想在一个查询中仅过滤工作日数据,在 Hive

中的另一个查询中过滤周末数据

TIME_STAMP

2018-03-12 15:30:00.0 --Monday
2018-03-13 15:30:00.0 --Tuesday
2018-03-14 15:30:00.0 --Wednesday
2018-03-15 15:30:00.0 --Thursday
2018-03-16 15:30:00.0 --Friday
2018-03-17 15:30:00.0 --Saturday
2018-03-18 15:30:00.0 --Sunday
2018-03-19 15:30:00.0 --Monday

我正在寻找的结果是

2018-03-12 15:30:00.0 --Monday
2018-03-13 15:30:00.0 --Tuesday
2018-03-14 15:30:00.0 --Wednesday
2018-03-15 15:30:00.0 --Thursday
2018-03-16 15:30:00.0 --Friday
2018-03-19 15:30:00.0 --Monday

这不是我的强项。

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用from_unixtimeunix_timestamp

进行游戏

这将返回星期几:

select from_unixtime(unix_timestamp('2018-03-12 15:30:00.0'), 'E')

,您的完整查询将如下所示:

select * from mytable where from_unixtime(unix_timestamp(time_stamp), 'E') in ('Mon', 'Tue', ...) ;

以下是配置单元中日期函数的完整说明:link

答案 1 :(得分:0)

在配置单元中,您可以使用unix_timestampfrom_unixtime UDF的组合来获取天数。

所以首先你必须得到天的名字

from_unixtime(unix_timestamp(col), 'EEE') as days

如果您想要全天候名称,可以使用EEEE

然后你可以过滤周末使用

where days != "Sat" or days != "Sun" 

答案 2 :(得分:-1)

desc datetoday;
OK
date1                   timestamp

select * from datetoday;
OK
2018-03-12 15:30:00
2018-03-13 15:30:00
2018-03-14 15:30:00
2018-03-15 15:30:00
2018-03-16 15:30:00
2018-03-17 15:30:00
2018-03-18 15:30:00
2018-03-19 15:30:00
Time taken: 0.101 seconds, Fetched: 8 row(s)
hive> select date1,from_unixtime(unix_timestamp(date1,'yyyy-mm-dd'),'E') from datetoday;
OK
2018-03-12 15:30:00 Mon
2018-03-13 15:30:00 Tue
2018-03-14 15:30:00 Wed
2018-03-15 15:30:00 Thu
2018-03-16 15:30:00 Fri
2018-03-17 15:30:00 Sat
2018-03-18 15:30:00 Sun
2018-03-19 15:30:00 Mon
Time taken: 0.095 seconds, Fetched: 8 row(s)