首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Impala中将具有AM/PM的字符串列转换为时间戳

在Impala中将具有AM/PM的字符串列转换为时间戳
EN

Stack Overflow用户
提问于 2021-11-22 05:58:32
回答 1查看 305关注 0票数 0

我有一个列,它具有字符串类型的值,如下所示:

代码语言:javascript
复制
31-Oct-2016 12:00 AM
31-May-2015 12:00 PM

我希望在IMPALA中将上述列值转换为时间戳。尝试过使用cast、to_timestamp和其他方法,但是它要么显示语法错误,要么显示结果为Null。你能提出一个解决方案吗?

第二需求

在字符串中有一个类似于下面的列,我希望它仅被转换为时间戳。

代码语言:javascript
复制
31-Oct-2016 12:00 
31-May-2015 12:00 

请给我个建议,我刚认识黑斑羚

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2021-11-22 06:18:31

您可以使用下面的代码。不幸的是,黑斑羚不具备am pm转换功能,但是您可以使用一些代码来识别PM,并在其中添加12个小时才能正确地转换。

代码语言:javascript
复制
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,它只是简单地转换为时间戳。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70061452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档