Przekonwertuj ciąg kolumnę z AM/PM w znacznik czasu w Impala

0

Pytanie

Mam kolumnę z wartościami ciąg rodzaju, jak pokazano poniżej:

31-Oct-2016 12:00 AM
31-May-2015 12:00 PM

Chcę przekształcić powyższe wartości kolumn w znacznik czasu w IMPALA. Próbowałem za pomocą cast, to_timestamp i innych sposobów , ale w rezultacie albo pojawia się błąd składni, albo wartość Null. Nie mógłbyś, proszę zaproponować rozwiązanie

2. wymóg

W wierszu znajdują się kolumny, jak pokazano poniżej, chcę, aby został on przekształcony tylko w znacznik czasu.

31-Oct-2016 12:00 
31-May-2015 12:00 

proszę zaproponować sposób, jestem nowy w Impala

Z góry dziękuję

casting hive impala timestamp
2021-11-22 05:58:32
1

Najlepsza odpowiedź

0

Możesz wykorzystać poniższy kod. Niestety, impala nie ma możliwości konwersji am pm, ale można użyć małej kod dla identyfikacji PM i dodać do niego 12 godzin do właściwej konwersji.

select 
if (right('31-Oct-2016 02:09 PM',2)='PM',
to_timestamp('31-Oct-2016 02:09 PM','d-MMM-yyyy H:m') + interval 12 hours,
to_timestamp('31-Oct-2016 02:09 PM','d-MMM-yyyy H:m')
) ampm_timestamp

Drugi wymóg -
Impala zawsze czeka na 24-godzinny godzinny podczas konwersji daty i czasu. Więc w twoim przypadku scenariusza 12 godzin w nocy musimy wykonać jakąś specjalną logikę, jak pokazano poniżej.
Najpierw sprawdź, czy jest to 12 godzin rano, a następnie minus 12 godzin, jeszcze sprawdź, czy to wieczór, następnie dodać 12 godzin(co obejmuje scenariusz 12 pm) i, w końcu, jeśli jest to inny czas, to po prostu przekształca się w znacznik czasu.

select 
CASE WHEN right('31-Oct-2016 12:09 AM',2)='AM' AND RIGHT( SPLIT_PART('31-Oct-2016 12:09 AM',':',1),2)='12'
THEN to_timestamp('31-Oct-2016 12:09 AM','d-MMM-yyyy HH:mm') - interval 12 HOURS 
ELSE CASE WHEN  right('31-Oct-2016 12:09 AM',2)='PM'
THEN to_timestamp('31-Oct-2016 12:09 AM','d-MMM-yyyy HH:mm') + interval 12 HOURS 
ELSE to_timestamp('31-Oct-2016 12:09 AM','d-MMM-yyyy HH:mm') 
END END AMPM_TIMESTAMP
2021-11-22 08:46:32

Dziękuję za powyższe odpowiedzi , ale szukam dokładny czas wskazany w żądaniu, na przykład, 12:00 lub 12:00, @Koushik Roy
Shanti

zaktualizował swoją odpowiedź.
Koushik Roy

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................