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