我正在寻找一种解决方法或hive日期函数,可以提供星期几的信息。
Sunday - 1
Monday - 2
Tuesday - 3
Wednesday - 4
Thursday - 5
Friday - 6
Saturday - 7
详细要求:我正在寻找一个函数,它以日期字符串(YYYYMMDD)作为输入,并根据上表输出星期几。
考虑使用 from_unixtime(你的日期,'u')
- 这将返回从 周一=1
开始的星期几的天数。
如果你的日期不是 unixtime 格式,可以使用下面的方法代替:
from_unixtime(unix_timestamp('20140112','yyyyMMdd'),'u')
参见:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html,获取简单日期格式文档。
您现在可以使用 date_format 函数(Hive 1.2):
hive> select date_format('2016-12-01' ,'u');
OK
4
select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table
在 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
Select date_format(current_date, 'EEEE');
这将给出星期日,星期一,星期二等
从Hive 2.2开始,还有另一种可能性:
hive> select extract(dayofweek FROM your_date) FROM your_table;
正如我所说,您需要编写一个接受字符串作为参数并返回字符串的UDF。 在UDF内部,您需要执行以下步骤:
1.) 使用 SimpleDateFormat(YYYYMMDD) 解析输入字符串
2.) 使用以下代码获取星期几:
Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
3.) 使用这个 dayOfWeek 值在一个 case 语句 中获取你的工作日字符串并返回该字符串。
希望这可以帮助到你...!!!