【问题标题】:Help translating Rails Sqlite query to postgresql帮助将 Rails Sqlite 查询转换为 postgresql
【发布时间】:2011-10-17 17:22:15
【问题描述】:

我使用以下代码来帮助查找当月的销售额。我的开发数据库是 SQLite,但我使用 Heroku 进行生产,它使用 PostgreSQL。所以我得到一个 strftime 函数不存在错误。我将如何翻译它,有没有办法翻译它,以便在查询我的 dev SQLite db 时它仍然有效?

sales = current_user.location.sales.find( :all,
                                          :conditions => ["strftime('%Y', date) = '?'
                                                          AND strftime('%m', date) = ?",
                                                          Date.today.year,
                                                          Date.today.strftime('%m')],
                                                          :order => "date")

【问题讨论】:

  • 使用 sqlite 进行开发和使用 postgres 进行部署是自找麻烦。为什么不在 postgres 上开发?
  • @Denis 我目前正在安装 postgres 以进行开发。我刚开始使用 sqlite,因为我很新,不知道 Heroku 使用的是 postgres。

标签: ruby-on-rails sqlite postgresql


【解决方案1】:

Postgres 不支持 strftime。您可以找到支持的日期/时间函数列表here

sales = current_user.location.sales.find( :all,
                                          :conditions => ["extract(year from date) = '?'
                                                          AND extract(month from date) = ?",
                                                          Date.today.year,
                                                          Date.today.strftime('%m')],
                                                          :order => "date")

【讨论】:

  • 谢谢!我有点不清楚如何使用这些功能。
【解决方案2】:

我认为 to_timestamp 或 to_char 是您想要查看的类似 Postgres 函数。文档非常简单;基本类似于 strftime 不同的模板模式:Postgres Datatype Formatting Functions

也许比您感兴趣的要多,但如果您正在使用 Heroku 做大量工作,我真的建议您在本地运行 Postgres。它会为您节省不少痛苦。

【讨论】:

  • 是的。我计划开始在本地运行 Postgres,尽管启动并运行它也给我带来了麻烦:/
【解决方案3】:

如果您尝试获取当月的销售数据,这可能是更合适的数据库无关查询。

current_user.location.sales.where(:date => (Time.now.beginning_of_month..Time.now)).order("date")

【讨论】:

  • 谢谢。这也很有效,但是当我尝试计算每个销售列的总和并且销售变量为空时对我造成了不同的问题。我最终使用了 postgres 函数并将我的开发数据库切换到 postgres。
猜你喜欢
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多