我正在寻找一个变通方法或Hive日期功能,使一周中的一天,
Sunday - 1 Monday - 2 Tuesday - 3 Wednesday - 4 Thursday - 5 Friday - 6 Saturday - 7
详细要求:我正在寻找一个函数,需要日期字符串(YYYYMMDD)作为输入和输出的一周中的每一天如上表。
sqserrrh1#
考虑使用from_unixtime(your date,'u')-这将返回从Monday=1开始的星期的天数。如果你的日期不是unixtime格式的,你可以使用下面的格式:
from_unixtime(your date,'u')
Monday=1
from_unixtime(unix_timestamp('20140112','yyyyMMdd'),'u')
参见:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html获取简单日期格式文档。
zbwhf8kr2#
现在可以使用date_format(Hive 1.2):
hive> select date_format('2016-12-01' ,'u'); OK 4
pvabu6sv3#
select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table
neekobn84#
扩展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
ttvkxqim5#
从Hive 2.2开始,还有另一种可能性:
hive> select extract(dayofweek FROM your_date) FROM your_table;
xtupzzrd6#
Select date_format(current_date, 'EEEE');
也就是说星期天,星期一,星期二等等
ulmd4ohb7#
正如我所说,你需要写一个UDF,它将接受一个字符串作为参数并返回一个字符串。在UDF中,您需要执行以下步骤:1.)使用**SimpleDateFormat(YYYYMMDD)**解析输入字符串2.)使用下面的代码获取星期几:
Calendar c = Calendar.getInstance(); c.setTime(yourDate); int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
3.)在case语句中使用此dayOfWeek值,以获取您的weekday String并返回该字符串。希望这对你有帮助…!!!
7条答案
按热度按时间sqserrrh1#
考虑使用
from_unixtime(your date,'u')
-这将返回从Monday=1
开始的星期的天数。如果你的日期不是unixtime格式的,你可以使用下面的格式:参见:http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html获取简单日期格式文档。
zbwhf8kr2#
现在可以使用date_format(Hive 1.2):
pvabu6sv3#
select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table
neekobn84#
扩展iggy的答案,下面是查询一周中的几天。根据需要调整查询以设置一周的第一天。
ttvkxqim5#
从Hive 2.2开始,还有另一种可能性:
xtupzzrd6#
也就是说星期天,星期一,星期二等等
ulmd4ohb7#
正如我所说,你需要写一个UDF,它将接受一个字符串作为参数并返回一个字符串。在UDF中,您需要执行以下步骤:
1.)使用**SimpleDateFormat(YYYYMMDD)**解析输入字符串
2.)使用下面的代码获取星期几:
3.)在case语句中使用此dayOfWeek值,以获取您的weekday String并返回该字符串。
希望这对你有帮助…!!!