2011-03-20 42 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發送到數據庫。

相關問題