我有两个字段:
last_modified : datetime
updated_at : timestamp
updated_at是刚刚添加到表中的新字段,last_modified包含准确的日期。
我希望能够循环遍历表中的所有行,选择last_modifed日期时间,将其转换为时间戳并将其保存在新的updated_at字段中。
不知道如何做到这一点,非常感谢任何帮助!
答案 0 :(得分:2)
尝试
update table_name set updated_at=unix_timestamp(last_modified);
我不是为什么要两次存储相同的数据。两次存储相同的数据可能会导致不一致。
如果您希望代码中有timestamp
,则可以在代码本身中执行此操作。
答案 1 :(得分:0)
如果您的表名为some_table
,那么您可以将其放入迁移的up
类方法中:
execute 'UPDATE some_table SET updated_at = last_modifed'
MySQL应该能够自动从datetime
转换为timestamp
。在SQL SET子句中,列特定于单个行,SET适用于所有匹配的行;没有WHERE子句,UPDATE适用于表中的所有行。请记住,SQL是基于集合的,所以一切都在行和循环上运行,并不真正适合模型。
我假设您正在使用ActiveRecord,因为您有一个名为updated_at
的时间戳。如果你没有使用ActiveRecord,那么你必须找到另一种方法将SQL UPDATE发送到数据库。