HIVE получает первый будний день текущего месяца - PullRequest
1 голос
/ 06 февраля 2020

Утро, Название говорит само за себя. Я не могу понять, как получить первый день недели текущего месяца (или предыдущего месяца и т. Д. c.) В HQL.

Таким образом, если сегодняшняя дата должна была быть оценена, она должна возвращать 2/3/2020 в качестве даты, так как 3-й день был первым днем ​​недели в этом месяце.

Я пробовал утверждения случая чтобы оценить первый день месяца, и если это суббота, добавьте 2 дня, воскресенье, добавьте 1, но он не работает, и я получаю следующую ошибку: ОШИБКА: Подготовить ошибку: org. apache .hive. service.cli.HiveSQLException: ошибка при компиляции оператора: FAILED: ParseException строка 1: 452 посторонних входных данных ',' ожидающих KW_THEN около '' строки 1: 626 посторонних входных данных ',' ожидающих KW_THEN около ''

case when date_format(date_add(current_date, 1 - day(current_date)),'u')=6, then  to_date(mydate) = date_add(date_add(current_date, 1 - day(current_date)+2))
        when date_format(date_add(current_date, 1 - day(current_date)),'u')=7, then  to_date(mydate) = date_add(date_add(current_date, 1 - day(current_date)+1))
            else to_date(mydate) = date_add(date_add(current_date, 1 - day(current_date))) end

Пожалуйста, помогите!

@ Vamsi Prabhala

Я пытался это сделать, но получаю результат 1. Мне нужна дата возвращения, особенно 2/3/2020 для этого месяца.

case when date_format(date_add(current_date, 1 - day(current_date)),'u')> 5 then  
to_date(mydate)= to_date(date_add(date_add(current_date, 1 - day(current_date)),8-cast(date_format(date_add(current_date, 1 - day(current_date)),'u') as int)%8))
    else to_date(mydate) = date_add(current_date, 1 - day(current_date)) end

1 Ответ

1 голос
/ 06 февраля 2020

Один из вариантов - получить первый день месяца, а затем добавить дни, если первый день месяца - выходные. По умолчанию рабочий день 1 = Monday, 2 = Tuesday ... 6 = Saturday, 7 = Sunday.

select dt
      ,case when date_format(first_day_in_month,'u') > 5 
            then date_add(first_day_in_month,8-cast(date_format(first_day_in_month,'u') as int))
       else first_day_in_month end as first_week_day
from (select dt
            ,date_sub(dt,cast(date_format(dt,'d') as int)-1) as first_day_in_month
      from tbl 
     ) t 
;

Обратите внимание, что функция date_format работает в версиях Hive 1.2.0 и выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...