Hive日期功能可实现星期几

时间:2014-04-10 08:40:05

标签: apache hive

我正在寻找一个星期几的变通方法或配置日期功能,

Sunday - 1
Monday - 2
Tuesday - 3
Wednesday - 4
Thursday - 5
Friday - 6
Saturday - 7

详细要求:我正在寻找一个以日期字符串(YYYYMMDD)作为输入的函数,并根据上表输出星期几。

6 个答案:

答案 0 :(得分:39)

考虑使用from_unixtime(your date,'u') - 这将从Monday=1开始返回星期几。 如果您的日期不是unixtime格式,则可以使用以下代码:

from_unixtime(unix_timestamp('20140112','yyyyMMdd'),'u')

请参阅:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html了解简单的日期格式文档。

答案 1 :(得分:12)

您现在可以使用date_format(Hive 1.2):

hive> select date_format('2016-12-01' ,'u');
OK
4

答案 2 :(得分:9)

select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table

  • 选择任意开始日期(1900-01-07)
  • 计算每周7天的mod(加1以1开始而不是0)

答案 3 :(得分:0)

从Hive 2.2开始,还有另一种可能性:

hive> select extract(dayofweek FROM your_date) FROM your_table;

答案 4 :(得分:0)

扩展iggy的答案,这是获取星期几的查询。调整查询以根据需要设置一周的第一天。

SELECT current_date AS `Date`,
       CASE date_format(current_date,'u')
           WHEN 1 THEN 'Mon'
           WHEN 2 THEN 'Tues'
           WHEN 3 THEN 'Wed'
           WHEN 4 THEN 'Thu'
           WHEN 5 THEN 'Fri'
           WHEN 6 THEN 'Sat'
           WHEN 7 THEN 'Sun'
END AS day_of_week

答案 5 :(得分:-4)

正如我所说,你需要编写一个UDF,它接受一个字符串作为参数并返回一个字符串。 在UDF内部,您需要执行以下步骤:

1。)使用 SimpleDateFormat(YYYYMMDD)

解析输入字符串

2。)使用以下代码获取星期几:

Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);

3。)在案例陈述中使用此 dayOfWeek 值来获取工作日字符串并返回该字符串。

希望这有助于...... !!!