您可以使用以下代码。不幸的是,impala 没有 am pm 转换功能,但您可以使用一些代码来识别 PM,并在此基础上增加 12 小时以正确转换。
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
第二个要求 -
Impala 在转换日期时间时总是需要 24 小时格式。因此,在您的情况下,对于上午 12 点的场景,我们必须执行一些特殊的逻辑,如下所示。
首先检查它是否是 12 AM,然后是负 12 小时,否则检查它是否是 PM,然后添加 12 小时(涵盖 12PM 场景),最后如果是任何其他 AM,它只是转换为时间戳。
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