Преобразование юлианских дат в григорианские даты в импале

У меня есть таблица, в которой даты указаны в юлианских датах, и я хотел бы преобразовать эти даты в даты календаря.

Вот образец юлианской даты, которая у меня есть: 2457395.

В календарной дате это должно быть: 07012016 (ДДММГГГГ).

Я попытался преобразовать дату в количество дней с (01.01.1900), но даже если я не знаю, как получить дату с количеством дней в качестве входных данных.

Спасибо заранее!


person nathan_nathan    schedule 14.12.2016    source источник


Ответы (2)


Impala не поддерживает даты, только метки времени; и у него нет многих функций форматирования даты/времени; так что вам нужно быть творческим, например.

select JULIAN_DATE,
  adddate('1900-01-01 00:00:00Z', JULIAN_DATE -2415021) as AS_TIMESTAMP,
  to_date(adddate('1900-01-01 00:00:00Z', JULIAN_DATE -2415021)) as AS_ISO_DATE_STRING,
  from_unixtime(unix_timestamp(adddate('1900-01-01 00:00:00Z', JULIAN_DATE -2415021)), "ddMMyyyy") as AS_DMY_DATE_STRING
from WHATEVER

Пример вывода:

julian_date as_timestamp        as_iso_date_string as_dmy_date_string 
----------- ------------------- ------------------ ------------------ 
2457395     2016-01-07 00:00:00 2016-01-07         07012016           
person Samson Scharfrichter    schedule 15.12.2016

Что ж, если это юлианская дата JDE, например, 118163 для 12-06-2018, то нижеприведенный код можно использовать date_add(to_timestamp(concat(substr(cast(cast(118162 + 1900000 as int) as string),1,4), '01','01'),'ггггММдд'), cast(substr(cast(cast(118162 + 1900000 as int) as string),5,3) as int)-1)

person saurabht    schedule 07.08.2018