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