SQL (HUE) : 有没有办法将 24 小时时间转换为 12 小时 AM / PM 格式与小时桶

Posted

技术标签:

【中文标题】SQL (HUE) : 有没有办法将 24 小时时间转换为 12 小时 AM / PM 格式与小时桶【英文标题】:SQL (HUE) : Is there any way to convert 24 hrs time into 12 hrs AM / PM format with hours buckets 【发布时间】:2021-03-23 16:24:43 【问题描述】:

我有表 A,其中包含存储为时间戳数据类型的列 time

表 A:包含 24 小时格式的 HH:MM:SS 时间列。

Sample data below:

time
12:32:45
16:09:04
09:02:16
18:34:33
08:59:30

Now I want to create a bucket based on hours and adding AM/PM.

eg: 
time between 00:00:00 - 00:59:00 = 12 AM,
01:00:00 - 01:59:00 = 01 AM,
14:00:00 - 14:59:00 = 02 PM and so on.

Desired Output :

time     new_time
12:32:45  12 PM
16:09:04  04 PM
09:02:16  09 AM
18:34:33  06 PM
08:59:30  08 AM

【问题讨论】:

标记您的数据库,解决方案可能依赖于 RDBMS @Stu 这是 Cloudera,脚本是 HUE-Impala。类似于 SQL 【参考方案1】:

请使用以下代码。将now() 替换为time 进行查询。

SELECT now(), lpad(CONCAT ( 
CAST (extract(hour from now()) + CASE WHEN extract(hour from now()) >12 THEN -12 
WHEN extract(hour from now())=0 THEN 12 
ELSE 0  END AS string) , 
CASE WHEN extract(hour from now())  >=12 THEN ' PM' ELSE ' AM' END),5,'0') as new_time 

说明—— 首先我正在检查小时是否> 12。如果是,则减去 12 得到小时。 然后根据小时设置上午/下午。 lpad 用于确保您获得 01 AM 格式的数据。

【讨论】:

谢谢@KoushikRoy 我想要一个适用于整个列级别而不是单个值的解决方案,因为该列有数百万条记录。 我使用了您的 time 列并修改了 SQL。我试图通过一个例子向你展示它是如何工作的。 当我将time 作为一列时,它会抛出 AnalysisException: No matching function with signature: left(TIMESTAMP, TINYINT)。我正在使用 Cloudera CDH6.3 对不起,我注意到时间是时间戳,我更正了查询。可以试试吗? @kaushikRoy 除了两件事 1:当时间的值在 12 范围内时,例如时间在 12:00:00 到 12:59:00 之间,它显示 0 PM 和2:我们是否也可以在一位数时间之前添加 0(零),例如当前的黑白 15:00:00 - 15:59:00,它显示为下午 3 点,我需要下午 3 点。再次感谢您。

以上是关于SQL (HUE) : 有没有办法将 24 小时时间转换为 12 小时 AM / PM 格式与小时桶的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hue 将数据从本地计算机上传到 Hive DB

有没有办法用 plotly 或 python 创建条形图可视化,其中 y 轴是 24 小时范围,x 轴是所有工作日?

如何使用 HUE 在 Impala 查询中设置变量?

大数据协作框架Sqoop+Flume+Oozie+Hue(59讲)

SQL Server ,按 24 小时时段拆分持续时间行

无法在 Cloudera Hue 的表详细信息中加载标签