[英]Comparing times in postgres and Rails
簡單地說,我有一個查詢:
@current_user.items.where('updated_at > ? AND updated_at < ?', last_sync_time_from_client, current_time)
我的問題是,我認為正在比較數據庫中的時間和last_sync_time_from_client
是浮動的。 即使時間updated_at > last_sync_time_from_client
秒,這始終會導致updated_at > last_sync_time_from_client
為true。
即
(db item)updated_at.to_f # 1541246811.022979
last_sync_time.to_f # 1541246811.0
這意味着直到第二秒的時間都將返回奇數。 有沒有辦法解決這個問題,還是我應該在last_sync_time_from_client中添加一秒鍾,以解決Rails在這里很奇怪的問題?
這是三個解決方案。 解決方案1是最好的(無損)。 解決方案2和3直接影響數據庫中的存儲值,因此選擇此方法后果自負。
采用
date_trunc('second', updated_at);
而不是updated_at
。 有關詳細信息,請參見“從時間戳中丟棄毫秒部分”的答案 。
Force Rails始終以一秒的精度更新時間戳,將亞秒部分截斷為零。
請參閱“是否有辦法將Rails默認時間戳更改為Ymd H:i:s(而不是Ymd H:i:su)或讓laravel忽略Ymd H:i:su的小數部分?”的答案。
使數據庫中的updated_at
列的精度為一秒,而不是默認的亞秒(如毫秒)。
有關如何使用Rails遷移的信息,請參見“如何將Rails遷移t.timestamps更改為在postgres中使用timestamp(0) without timezone
”的答案 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.