我有一列的值为字符串类型,如下所示:
31-Oct-2016 12:00 AM
31-May-2015 12:00 PM
我想在IMPALA中将上述列值转换为时间戳。尝试了强制转换、to_timestamp和其他方法,但结果要么显示语法错误,要么显示Null。你能建议的解决方案吗
第二项要求
字符串中有一个类似下面的列,我希望它单独转换为时间戳。
31-Oct-2016 12:00
31-May-2015 12:00
请给我一个建议,我是黑斑羚的新手
提前感谢
您可以使用以下代码。不幸的是,黑斑羚没有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小时(包括12 PM场景(,最后如果为任何其他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