在postgresql中将字符变化列类型转换为时间时出错

时间:2017-05-13 03:39:57

标签: sql postgresql

我正在尝试将字符“event_time”从字符变为时间数据类型。列中的数据格式为'00:10:3​​0'。

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

2 个答案:

答案 0 :(得分:0)

由于你没有告诉我们你尝试了什么,我只是在猜测。

Rextester Demo1

Rextester Demo2

00:10:31转换为date时的问题无法直接解决,因为date部分没有time部分。

因此,在将日期部署为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以查看两者之间的区别。

答案 1 :(得分:0)

您可以通过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)

建议在架构更改之前备份表格。