我有一个列,它具有字符串类型的值,如下所示:
31-Oct-2016 12:00 AM
31-May-2015 12:00 PM我希望在IMPALA中将上述列值转换为时间戳。尝试过使用cast、to_timestamp和其他方法,但是它要么显示语法错误,要么显示结果为Null。你能提出一个解决方案吗?
第二需求
在字符串中有一个类似于下面的列,我希望它仅被转换为时间戳。
31-Oct-2016 12:00
31-May-2015 12:00 请给我个建议,我刚认识黑斑羚
提前感谢
发布于 2021-11-22 06:18:31
您可以使用下面的代码。不幸的是,黑斑羚不具备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 AM场景中,我们必须做一些特殊的逻辑,如下所示。
首先检查它的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_TIMESTAMPhttps://stackoverflow.com/questions/70061452
复制相似问题