Puteți folosi codul de mai jos. Din păcate, impala nu am pm de conversie capacitate, dar puteți folosi un pic de cod pentru a identifica PM și se adaugă 12 ore pentru a converti în mod corespunzător.
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
A doua cerință -
Impala întotdeauna se așteaptă 24 de ore ore format atunci când se convertește datetime. Deci, în cazul în care pentru 12 scenariu, trebuie să facem ceva special logica de genul de mai jos.
În primul rând verificați dacă ora 12, apoi minus 12 ore, altfel verifica daca PM, apoi se adaugă 12 ore(care acoperă 12 scenariu) și, în sfârșit, dacă își orice alte SUNT, pur și simplu convertește la timestamp.
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