【问题标题】:Error converting character varying column type to time in postgresql在 postgresql 中将字符不同的列类型转换为时间时出错
【发布时间】:2017-10-12 10:28:14
【问题描述】:

我正在尝试将“event_time”列从字符更改为时间数据类型。列中的数据格式为“00:10:30”。

我收到以下错误:- 错误:“SS”的无效值“:3” DETAIL:值必须是整数。

【问题讨论】:

标签: sql postgresql


【解决方案1】:

由于您没有向我们展示您尝试了什么,我只是在这里猜测。

Rextester Demo1

Rextester Demo2

无法直接将00:10:31 转换为date 时出现问题,因为time 部分没有附加date 部分。

因此,您必须先将日期硬编码为时间部分,然后再将其转换为 date。所以在转换时你必须使用

ALTER TABLE your_table ALTER COLUMN event_time 
   TYPE DATE using to_date('1901-01-01 '||event_time,'YYYY-MM-DD HH24:MI:SS');

查看上面的演示了解更多信息。检查 Demo2 看看两者之间的区别。

【讨论】:

    【解决方案2】:

    您可以通过USING 子句将列转换为TIME 数据类型,如下所示:

    CREATE TABLE time_test (
        id integer NOT NULL,
        event_time CHARACTER VARYING(8) NULL
    );
    
    INSERT INTO time_test VALUES (1, '00:10:30');
    
    \d time_test
                        Table "public.time_test"
          Column      |            Type             |       Modifiers        
    ------------------+-----------------------------+------------------------
     id               | integer                     | not null
     event_time       | character varying(8)        | 
    
    SELECT * FROM time_test;
     id | event_time 
    ----+------------
      1 | 00:10:30
    (1 row)
    
    -- Alter column from CHARACTER VARYING to TIME
    ALTER TABLE time_test ALTER COLUMN event_time TYPE TIME USING (event_time::TIME);
    
    \d time_test
                        Table "public.time_test"
          Column      |            Type             |       Modifiers        
    ------------------+-----------------------------+------------------------
     id               | integer                     | not null
     event_time       | time without time zone      | 
    
    SELECT * FROM time_test;
     id | event_time 
    ----+------------
      1 | 00:10:30
    (1 row)
    

    请注意在这样的架构更改之前备份表。

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      相关资源
      最近更新 更多