Функция даты улья для достижения дня недели
Я ищу временные или выходные функции даты, которые дают день недели,
Sunday - 1
Monday - 2
Tuesday - 3
Wednesday - 4
Thursday - 5
Friday - 6
Saturday - 7
Требование подробно: я ищу функцию, которая берет строку даты (YYYYMMDD) как входную и выводит день недели в соответствии с приведенной выше таблицей.
Ответы
Ответ 1
Как я уже сказал, вам нужно написать UDF, который примет строку как параметр и вернет строку.
Внутри UDF вам необходимо выполнить следующие действия:
1.) Разберите входную строку с помощью SimpleDateFormat (YYYYMMDD)
2.) Используйте код ниже, чтобы получить день недели:
Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
3.) Используйте это значение dayOfWeek в операторе case , чтобы получить строку дня недели и вернуть эту строку.
Надеюсь, это поможет...!!!
Ответ 2
Рассмотрим использование 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 для простой документации формата даты.
Ответ 3
select pmod(datediff(your_date,'1900-01-07'),7) + 1 as WeekDay from your_table
- произвольная дата начала выбрана (1900-01-07)
- вычисляет модем 7 день недели (плюс 1 для начала с 1 вместо нуля)
Ответ 4
Теперь вы можете использовать date_format (Hive 1.2):
hive> select date_format('2016-12-01' ,'u');
OK
4