[英]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.