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 小时格式的主要内容,如果未能解决你的问题,请参考以下文章