Функция даты улья для достижения дня недели

Я ищу временные или выходные функции даты, которые дают день недели,

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