尝试将字符串列转换为日期。列目前包含值,例如' 20170130'和' 20161130'。
当我尝试:
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:错误:类型为date的输入语法无效
任何人都知道发生了什么?想从字符串到日期转换会更容易......
提前致谢
答案 0 :(得分: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