【问题标题】:Active Record and migrating malformed datesActive Record 和迁移格式错误的日期
【发布时间】:2012-08-01 21:02:27
【问题描述】:

我有一个在 CakePHP 和 MySQL 上运行的旧数据库,它正在迁移到 Postgres 数据库上的新 Rails 应用程序,该数据库具有完全不同的结构。我有一小段迁移让我很不舒服,我希望这里的人能指出我正确的方向。

本质上,有一些日期列(MySQL 类型的 Date)包含格式错误的日期。大多数格式错误的日期都是'2012-08-00' 的形式,MySQL2 适配器会阻塞这些日期(显然 00 不是一个月中的有效日期)。如果我可以将它们放入模型中,我可以进行必要的转换,将它们变成更完整的新格式。即使将它们作为字符串从数据库中取出就足够了,我可以通过这种方式进行必要的操作。

我收到以下错误:

Mysql2::Error: Invalid date: 2011-12-00

每当我尝试从系统中选择一个无效日期时。表中有 3800 行,我估计大约有一半的人试图手动完成并修改它们会花费大量时间(但并非过度,如果需要这样做的话)。

任何建议将不胜感激!

【问题讨论】:

  • 我只是在 MySQL 中使用 REPLACE 将 '-00' 大量替换为 '-01' (不确定您是否可以在 DATE 字段上执行此操作,但应该
  • @AnthonyAlberto,我会考虑是否可以做到这一点。也许使用正则表达式。

标签: mysql ruby-on-rails activerecord


【解决方案1】:

这样的东西应该可以工作(未经测试):

update [table] set [field] = DATE_ADD([field],INTERVAL 1 day) where day([field]) = '0'

【讨论】:

  • 一夜的睡眠和不同的方法导致了不同的答案,但我后来确实检查了,这样的事情也会起作用。感谢您的帮助!
  • 等待 30 分钟解决问题的可怕时刻太艰难了...... :)
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 2019-05-17
  • 2016-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多