2011-03-20 104 views
2

我有两个领域:如何使用Ruby将MySQL日期时间字段转换为时间戳?

last_modified : datetime 
updated_at : timestamp 

的updated_at是刚刚被添加到表中的一个新领域,LAST_MODIFIED包含准确的日期。

我希望能够遍历所有的表中的行,选择last_modifed日期时间,将其转换成时间戳并将其保存在新的updated_at领域。

不知道如何做到这一点,任何帮助深表感谢!

回答

2

尝试

update table_name set updated_at=unix_timestamp(last_modified); 

我不知道为什么你要存储相同的数据的两倍。两次存储相同的数据可能会导致不一致。

如果你想在你的代码timestamp,你能做到这一点的代码本身。

+0

虽然这听起来像一个合适的答案 - 怎么样的考虑时区?如果last_modified中的数据没有隐式存储为UTC,该怎么办? – TJChambers 2012-12-18 17:11:40

+0

unix_timestamp从1月1日0000 UTC返回秒。即使你的机器的时区与UTC不同,上面的功能也会适应这一点。 – Zimbabao 2012-12-19 16:22:00

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发送到数据库。

相关问题