簡體   English   中英

比較Postgres和Rails中的時間

[英]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直接影響數據庫中的存儲值,因此選擇此方法后果自負。

解決方案1

采用

date_trunc('second', updated_at);

而不是updated_at 有關詳細信息,請參見“從時間戳中丟棄毫秒部分”的答案

解決方案2

Force Rails始終以一秒的精度更新時間戳,將亞秒部分截斷為零。

請參閱“是否有辦法將Rails默認時間戳更改為Ymd H:i:s(而不是Ymd H:i:su)或讓laravel忽略Ymd H:i:su的小數部分?”的答案。

解決方案3

使數據庫中的updated_at列的精度為一秒,而不是默認的亞秒(如毫秒)。

有關如何使用Rails遷移的信息,請參見“如何將Rails遷移t.timestamps更改為在postgres中使用timestamp(0) without timezone ”的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM