Что эквивалентно SYSDATE ORACLE в Impala?

#sql #oracle #impala #sysdate

#sql #Oracle #impala #sysdate

Вопрос:

У меня есть предложение WHERE, которое я пытаюсь преобразовать из ORACLE SQL в Impala SQL. Вывод col2 выглядит примерно как 201406. Мне нужно, чтобы это было доступно для чтения в Impala, затем отформатируйте его, а затем превратите в строку. Любая помощь была бы высоко оценена!

 WHERE Table1.col2 <= to_char( SYSDATE-7, 'YYYYMM')
  

Комментарии:

1. Стандартом ANSI было бы CURRENT_TIMESTAMP . Возможно, ваша база данных поддерживает стандарт.

2. Спасибо. итак, как мне сделать текущую временную метку в формате ГГГГ?? а затем минус 7 месяцев от нее

3. Проверьте руководство: функции форматирования форматирования должны быть задокументированы. Чтобы сделать «минус», вы можете сделать current_timestamp - interval '7' month в стандартном SQL.

4. Может быть, следующая ссылка поможет? cloudera.com/content/cloudera-content/cloudera-docs/Impala /…

5. @DavidFaber — current_timestamp() и date_sub() решить половину проблемы. Но добиться соответствия в формате ‘ГГГГ’ будет сложнее.

Ответ №1:

current_timestamp() является псевдонимом now(), поэтому любой из них может использоваться вместо sysdate

SYSDATE-7 — это sysdate минус 7 дней, поэтому эквивалент WHERE Table1.col2 <= to_char( SYSDATE-7, 'YYYYMM') равен

 WHERE Table1.col2 <= concat( cast(year(to_date( days_add(current_timestamp(),-7 ))) as string), cast(month(to_date( days_add(current_timestamp(),-7 ) )) )
  

или, если вычет составляет 7 месяцев, тогда:

 concat( cast(year(to_date( months_add(current_timestamp(),-7 ))) as string), cast(month(to_date( months_add(current_timestamp(),-7 ) )) )
  

обратите внимание, все непроверенные, и я использовал days_add() или months_add (), поскольку многие люди предпочитают использовать минус 7 вместо days_sub () с положительным значением 7. Однако я предполагаю, что это сработает (это работает в MySQL, который имеет аналогичные функции арифметики даты).

Также обратите внимание, что подразумевается, что ваше поле Table1.col2 имеет строковый тип, если это целое число, то требуется немного другое решение.

 year( months_add(current_timestamp(),-7 ) ) * 100   month(days_add(current_timestamp(),-7 ))

year( months_add(current_timestamp(),-7 ) ) * 100   month(months_add(current_timestamp(),-7 ))
  

Комментарии:

1. Похоже, что это должно сработать, потому что, как вы сказали, функциональность более или менее такая же, как у Mysql. У меня это пока не работает, но я придумал для этого действительно длинный хакерский / грубый sql-код с impala 1.1.3

2. да, это будет долго и грубо, как кажется, извините, но я не могу это протестировать, поэтому я не уверен, как помочь дальше

Ответ №2:

Используйте приведенный ниже синтаксис:

 select from_unixtime(unix_timestamp(now()), 'yyyy-MM-dd')