【问题标题】:Redshift varchar column time convert to 12 hours formatRedshift varchar 列时间转换为 12 小时格式
【发布时间】: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

请告诉我做错了什么:(

【问题讨论】:

    标签: amazon-redshift


    【解决方案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 数据类型用于依赖表数据的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多