Redshift varchar 列时间转换为 12 小时格式

Posted

技术标签:

【中文标题】Redshift varchar 列时间转换为 12 小时格式【英文标题】:Redshift varchar column time convert to 12 hours format 【发布时间】:2020-03-04 11:19:52 【问题描述】:

我在 redshift 表中有一个 varchar 列,其中时间以 24 小时格式存储,例如 17:00,我想查询该表并将格式转换为 12 小时格式,及时显示 AM 或 PM。当我像to_char('17:00'::time,'HH12:MI AM') 一样进行测试时,它工作正常,但是当我将列名代替硬编码值查询表时,

SELECT to_char(prepoll_start::time,'HH12:MI AM') 
FROM votecast.poll_hours AS ph 
WHERE ph.prepoll_start is not null 
  and state = 'AL' 
  AND tab_elec_type = 'primary'

不行,报错

无效操作:Redshift 表不支持指定的类型或函数(每条 INFO 消息一个)。;

Postgres 版本是 8.0.2

请告诉我做错了什么:(

【问题讨论】:

【参考方案1】:

首先,我必须在可用时间之外创建一个时间戳值。然后以 12 小时格式获取时间。

select to_char( to_timestamp('1900-01-01 '||prepoll_start||':00' ,'YYYY/MM/DD HH:MI:SS') , 'HH12:MI AM') 
from votecast.poll_hours;

【讨论】:

是的,我知道,但是如果不将日期附加到时间上就可以实现吗? 我不这么认为【参考方案2】:

Amazon Redshift 不支持 TIME 数据类型。

见:Datetime Types - Amazon Redshift

但是,您说得对,它似乎支持TIME 进行非表相关操作。

我尝试过使用字符串操作,但无法解决您遇到的错误。我认为这是因为 TIME 在领导节点上被识别,但无法在计算节点上运行。 (这类似于time_series()的行为。)

因此,您将无法将 TIME 数据类型用于依赖表数据的任何内容。

【讨论】:

以上是关于Redshift varchar 列时间转换为 12 小时格式的主要内容,如果未能解决你的问题,请参考以下文章

Redshift dateadd() 函数错误白色将时间值从 varchar 转换为 time

有没有办法在 AWS Redshift 中将 VARCHAR 转换为 DATE?

需要从源表中获取布尔类型列作为 varchar 并在 Amazon redshift 的目标表中存储为 varchar

如何将 TIMESTAMP 转换为 VARCHAR 并将其保存到 Redshift 中的另一个表中?

为啥 Redshift 在加入时会自动修剪 varchar 列?

Redshift 如何治疗海龟?