我正在尝试将字符“event_time”从字符变为时间数据类型。列中的数据格式为'00:10:30'。
我收到以下错误: - 错误:“SS”的值无效“:3” DETAIL:值必须是整数。
答案 0 :(得分:0)
由于你没有告诉我们你尝试了什么,我只是在猜测。
将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)
建议在架构更改之前备份表格。