【发布时间】:2011-05-13 18:05:07
【问题描述】:
我在查询时遇到了很多麻烦。我真的不知道如何解释这一点,但我会尝试。
基本上,我们有几个带有“posted_at”字段的对象,它在日期时间字段中保存发布日期和时间以及时区。我需要查询并获取这些对象的日期范围。
以前,我将其转换为 Date 并将其与另一个 Date 对象进行比较。查询是这样的:
Date(posted_at) >= :start_date AND Date(posted_at) <= :end_date
但是,当 Postgre 将其转换为 Date 时,它会丢失导致查询结果不准确的时区信息。
所以,我改成这样:
if start_date then
start_time = Time.zone.parse("#{start_date.year}-#{start_date.month}-#{start_date.day}")
conditions << "posted_at >= :start"
hash[:start] = start_time
end
if end_date then
end_time = Time.zone.parse("#{end_date.year}-#{end_date.month}-#{end_date.day}").end_of_day
conditions << "posted_at <= :end"
hash[:end] = end_time
end
虽然这让我得到了准确的结果,但它的性能也很糟糕,并导致我的应用程序出现一些超时。
我找不到任何其他方法来执行此查询并仍然保持准确的结果。有人有什么建议或想法吗?
提前谢谢你。
【问题讨论】:
标签: ruby-on-rails performance postgresql datetime timezone