2017-05-13 6 views
0

"event_time"列を時間データ型から文字列に変更しようとしています。列のデータは '00:10:3​​0'の形式です。postgresqlの文字列型を時刻に変換中にエラーが発生しました

次のエラーが表示されます。 - エラー: "SS"の値が ":3"で無効です DETAIL:値は整数でなければなりません。

+0

よく、あなたのやり方を示していない、これは助けになるかもしれない、http://stackoverflow.com/questions/13287618/cast-varchar-type-to-date –

答えて

0

私があなたに何を試してもわからないので、私はここで推測しています。

Rextester Demo1

Rextester Demo2

問題date00: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をチェックしてください。

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) 

このようなスキーマの変更の前にテーブルのバックアップにご注意ください。

関連する問題