Hive日期函数实现星期几

20

我正在寻找一种解决方法或hive日期函数,可以提供星期几的信息。

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

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


你需要为此编写UDF。 你能解释一下你的需求吗?此外,该列的数据类型是什么? - Mukesh S
7个回答

46

它只能在Java 7中运行,在Java 6上会失败(http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html中没有'u'选项)。 - Ivan Klass
4
另外,如果您想获得星期几的文本版本(例如“Mon”,“Tue”等),则可以在“u”的位置使用“E”。 - willwest
1
星期一是1,星期日是7。 - Mike S
如果您能分享任何想法,我将不胜感激。 - Topde
https://stackoverflow.com/questions/68568002/how-to-set-simpledateformat-w-use-monday-as-the-first-day-of-the-week-instead-of - Topde

24

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

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

13

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

  • 将任意起始日期(选为1900-01-07)与你的日期比较
  • 计算星期几的模数(加1以从1开始而不是从零开始)

4

在 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

0
Select date_format(current_date, 'EEEE');

这将给出星期日,星期一,星期二等


0

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

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

-8

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

1.) 使用 SimpleDateFormat(YYYYMMDD) 解析输入字符串

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

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

3.) 使用这个 dayOfWeek 值在一个 case 语句 中获取你的工作日字符串并返回该字符串。

希望这可以帮助到你...!!!


1
完全没有必要为此编写您自己的UDF。 - swdev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接