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 格式与小时桶的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法用 plotly 或 python 创建条形图可视化,其中 y 轴是 24 小时范围,x 轴是所有工作日?