"event_time"列を時間データ型から文字列に変更しようとしています。列のデータは '00:10:30'の形式です。postgresqlの文字列型を時刻に変換中にエラーが発生しました
次のエラーが表示されます。 - エラー: "SS"の値が ":3"で無効です DETAIL:値は整数でなければなりません。
"event_time"列を時間データ型から文字列に変更しようとしています。列のデータは '00:10:30'の形式です。postgresqlの文字列型を時刻に変換中にエラーが発生しました
次のエラーが表示されます。 - エラー: "SS"の値が ":3"で無効です DETAIL:値は整数でなければなりません。
私があなたに何を試してもわからないので、私はここで推測しています。
問題date
に00:10:31
の変換中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');
上記のデモを確認してください。 2つの違いを確認するにはDemo2をチェックしてください。
あなたは下図のよう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)
このようなスキーマの変更の前にテーブルのバックアップにご注意ください。
よく、あなたのやり方を示していない、これは助けになるかもしれない、http://stackoverflow.com/questions/13287618/cast-varchar-type-to-date –