【问题标题】:ActiveRecord::Base.connection.execute and pure sql return different resultActiveRecord::Base.connection.execute 和纯 sql 返回不同的结果
【发布时间】:2020-11-13 07:59:33
【问题描述】:

我使用 ActiveRecord::Base.connection.execute 和纯 sql 进行相同的查询,但结果不同。有没有人遇到过像我这样的情况?我使用 postgresql 9.6 和 activerecord 5.2.3

我的查询:

SELECT history_id, timestamp
FROM xxx
 WHERE (
 timestamp >= TO_TIMESTAMP('2002/07/17 00:00:00', 'YYYY/mm/DD HH24:MI:SS') AND
 timestamp < TO_TIMESTAMP('2002/07/23 00:00:00', 'YYYY/mm/DD HH24:MI:SS') +'1 day'::interval
 --
 )

我通过 ActiveRecord::Base.connection.execute(my_query) 查询 ActiveRecord 结果记录在 2002/07/24 的时间戳。当我使用纯 SQL 查询时,这些不会出现。

我在 xxx 表中的时间戳列有类型:带时区的时间戳

【问题讨论】:

  • 哪个查询?你的数据库状态是什么?你怎么称呼它?它在返回什么?它应该返回什么?
  • 感谢您的评论。我已经编辑了我的帖子

标签: ruby postgresql activerecord sinatra sinatra-activerecord


【解决方案1】:

问题是 ActiveRecord 中的 default_timezone 和 psql 中的 timezone 不同。就是这样:))

【讨论】:

    猜你喜欢
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多