从具有活动记录的查询中获取不同的结果

时间:2016-01-17 05:11:51

标签: ruby-on-rails ruby postgresql

我有UTC日期表。当试图通过在PostgreSQL中使用dow来获取星期几时,如果小时流到第二天,我会得到错误的一天(我需要正确的道具)。

我创造了一个小提琴来表明问题:
http://sqlfiddle.com/#!15/9aa9e/11

如果我在我的pgAdmin上本地运行查询,它将返回正确的dow。但是在小提琴和铁轨上,我得到了错误的道具。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

好的,所以我明白pgAdmin根据我的时区做了自己的魔术,当rails发送时,它显然不会发生。 我所使用的系统依赖于rails来回传递UTC日期时的转换魔法这一事实,如果你不使用本地postgreSQL时区相关功能,如DOW,那么这种方法很有用。我没有做的是,如果我给道琼斯指数正确的偏移,它工作得很好。所以,如果有其他人需要,我可以解决这个问题:

utc_diff = Time.current.time_zone.utc_offset/60/60
# making sure the diff is either  + or - (minus is automatic) 
utc_diff = utc_diff < 0 ? utc_diff : "+#{utc_diff}"
dow_part = "EXTRACT(DOW FROM punches.punched_in_at at time zone 'UTC#{utc_diff}') as dow"

所以你有它,希望它能帮助别人。