問題是我有一個表類型爲date的表,但我只是使用年份。如何將它改爲整數類型以保持一年?我需要三步遷移嗎?我該如何回滾?Rails遷移:將列數據類型從日期更改爲整數
1
A
回答
2
我不同意其他海報:你最好不要存放一年爲一個整數,如果這是真的,你想捕捉的信息。因爲如果你不這樣做,並存儲一個完整的日期,那麼你實際上存儲的是一個虛假陳述的信息。也就是說,它存儲一個日期和一個月以及可能還有一些日曆元數據。每次使用它時,都需要牢記這一點,並確保任何計算都是您真正想要做的。也就是說,有許多日期和時間類和庫,都在使用中,都在Rails和Ruby中。
如果您只需要並且想要一年,那麼只需存儲一年。爲了達到這個目的,我會採用簡單而保守的方式:做幾個簡單的遷移。
- 添加新年欄。
- 轉換數據。
- 刪除舊年欄。
2
我同意這裏的其他海報,你可能最好把它作爲一個日期值,只顯示一年。出於計算目的,也許您可以將該列中的所有日期值設置爲01-01-YYYY。然後,當你想在視圖中顯示的那年,做:
#- my_date_value=Wed, 18 Sep 2013 19:21:11 UTC +00:00
my_date_value.year
=> 2013
即
<%= my_date_value.year %>
但是,如果你下定決心,使這個日期值,那麼你可以做這樣的遷移下面將其轉換爲一個只有一年整場:
class ChangeThingDateToYear < ActiveRecord::Migration
def change
add_column :things, :my_year_value, :integer
# You need to tell ActiveRecord to refresh the object
MyDatedThings.reset_column_information
MyDatedThings.all.each do |r|
r.my_year_value = r.my_date_value.year
r.save!
end
remove_column :things, :my_date_value
# If you want to keep the same column name
rename_column :things, :my_year_value, :my_date_value
end
end
+0
感謝您提供您的觀點和遷移代碼。很有用!我實際上只使用日期類型,並且只按照你所說的與年份一起工作,所以現在我要嘗試另一種方法。謝謝。 – hector
相關問題
- 1. 將遷移類型從日期更改爲整數
- 2. Rails 4遷移將列數據類型從字符串更改爲整數並保留後備數據(postgres)
- 3. 如何在Rails遷移中將整數列更改爲datetime?
- 4. 更改列值數據類型(日期)
- 5. 將列從他們當前的varchar數據類型更改爲日期和日期時間數據類型
- 6. T-SQL - 將日期時間更改爲日期數據類型?
- 7. 將日期時間更改爲日期數據類型?
- 8. 將數據類型從因子更改爲日期R
- 9. 在mysql中將數據類型從日期更改爲日期/時間?
- 10. Laravel遷移將列類型從varchar更改爲longText
- 11. 將日期時間更改爲日期格式的日期數據類型?
- 12. 從文本更改列數據類型爲整數PostgreSQL中
- 13. 從整數數據幀列類型更改爲因素
- 14. 遷移後更改數據庫整理?
- 15. 在列表中將列數據類型從布爾值更改爲整數
- 16. Rails的遷移,更改:id列型
- 17. 將依賴項的列的數據類型從整數更改爲數字
- 18. Rails遷移和列更改
- 19. 將數據類型從varchar(int)修改爲日期和時間
- 20. Ruby on rails - 使用遷移工具將數據庫中的日期字段遷移到3個整數字段
- 21. Rails Migrations:試圖將列的類型從字符串更改爲整數
- 22. 以整數格式遷移mysql日期
- 23. 如何遷移更改列類型?
- 24. 如何在我的Rails遷移中將列類型更改爲間隔?
- 25. 將更改遷移到數據庫
- 26. 如何將數據庫列從整數遷移到rails中的bigint?
- 27. 是否有可能將數據類型從字符串更改爲日期
- 28. 如何生成遷移以更改Rails中的數據庫列
- 29. Rails更改MySQL和Postgres的列類型遷移
- 30. 在Rails ActiveRecord遷移中將數據類型映射到MySQL
將它作爲日期,但僅顯示年份。如果您不想打擾進入月份或日期,請使用1月1日。 –
我同意@RobertHarvey,如果它真的仍然意味着某個日期的「年份」,我會放棄它。如果你真的想要一個整數,你可以在一次遷移中做所有事情,但回滾不能直接恢復你將要拋出的月份和日期信息。 – lurker