Rails / POSTGRES ISDATE函数

时间:2015-01-26 21:43:41

标签: ruby-on-rails ruby postgresql date

我想将所有非日期格式的字符串更改为日期为nil,然后更改列类型。我曾计划使用以下内容:

class SetSubmitDateForAllMyTables < ActiveRecord::Migration
  def self.up
    MyTable.connection.execute("UPDATE my_table SET submit_date = NULL WHERE NOT ISDATE(submit_date)")
    MyTable.connection.execute("UPDATE my_table SET submit_date=created_at WHERE submit_date IS NULL")
    change_column :my_table, :submit_date, :date
  end

  def self.down

  end
end

然而,ISDATE函数似乎在POSTGRES中无效。我怎么能做到这一点?

我愿意使用:

MyTable.all.each do |list|

1 个答案:

答案 0 :(得分:0)

Postgresql可以强制执行字符串到日期,但它会在无效字符串上出错:

dev_db=> select '1/2/2015'::date;
    date
------------
 2015-01-02

dev_db=> select 'asdf'::date;
ERROR:  invalid input syntax for type date: "asdf"
LINE 1: select 'asdf'::date;
               ^

为了解决这个问题,你可以创建一个Postgresql函数来检查一个字符串是否是一个有效的日期,但实际上,只需处理迁移中每条记录的转换就会容易得多。