2017-11-30 22 views
0

文字列を現在の日付に変換しようとしています。列には現在、「20170130」や「20161130」などの値が保持されています。Postgres DB列型変換

私は試してみてください。

change_column :tickets, :string_date, :date 

これは私にエラー与える:だから、

PG::DatatypeMismatch: ERROR: column "string_date" cannot be cast automatically to type date. 
HINT: Specify a USING expression to perform the conversion. 

を、私がしようとしません:次のエラーで

change_column :tickets, :string_date, 'date USING CAST(string_date AS date)' 

はまだ運、:

PG::InvalidDatetimeFormat: ERROR: invalid input syntax for type date

誰でも何が起こっているか知っていますか?事前

答えて

1

おかげで奇妙な...日付に文字列から変換することは容易になるだろうと思った - 私はあなたが日付をキャストに失敗した値を、見ることを期待する、例えば:

多分
t=# create table a2(string_date text); 
CREATE TABLE 
t=# insert into a2 values ('20170130'),('20161130'); 
INSERT 0 2 
t=# insert into a2 select 'bad value'; 
INSERT 0 1 
t=# alter table a2 alter COLUMN string_date type date using string_date::date; 
ERROR: invalid input syntax for type date: "bad value" 

?その空の文字列..

とにかく - 不正な値を見つけ、それを修正し、再度変換しよう:

t=# select string_date from a2 where string_date !~ '\d{8}'; 
string_date 
------------- 
bad value 
(1 row) 
t=# begin; 
BEGIN 
t=# delete from a2 where string_date !~ '\d{8}'; 
DELETE 1 
t=# alter table a2 alter COLUMN string_date type date using string_date::date; 
ALTER TABLE 
t=# end; 
COMMIT 
+0

これは私をたくさん助けました!ありがとう!それは悪い記録があったことが判明しました(バー、私がそれに気付かなかったと信じることはできません)。私は悪い記録を取り除いて、それをブームにして、そこに行く!ありがとう! – gitastic