【问题标题】:Sqlite to Postgres (Heroku) Date/TimeSqlite 到 Postgres (Heroku) 日期/时间
【发布时间】:2011-07-30 19:21:51
【问题描述】:

在 Heroku (postgres) 上将 Rails 3 应用程序投入生产时出现错误,而本地 (sqlite) 代码运行良好 - 我查看了 Postgres 手册,但无济于事:

我的代码:

(strftime('%s','now') - strftime('%s', post.created_at)

错误:

第 1 行:选择帖子。*, ((strftime('%s','now') -...
提示:否 函数匹配给定的名称和 参数类型。您可能需要添加 显式类型转换。

【问题讨论】:

    标签: sql ruby-on-rails-3 sqlite postgresql heroku


    【解决方案1】:

    在 PostgreSQL 中,您没有函数 strftime。要计算日期之间的秒数,您可以使用:

    SELECT extract(epoch from now() - posts.created_at);
    

    同样重要的是要注意在 PostgreSQL 中你有区间数据类型,所以如果你只是减去 (now() - posts.created_at) 它将为你返回一个很好的区间类型,它可以很容易地用 to_char 格式化。

    【讨论】:

      【解决方案2】:

      该函数到底应该做什么?

      要格式化日期或时间戳列,请使用to_char()

      要计算两个日期之间的天数差,只需使用:now() - posts.created_at(假设 created_at 是 date 类型的列)

      如果created_at 不是date 列(这将是一个大错误),则需要使用 to_date() 将字符串转换为日期。

      【讨论】:

      • 这是一个 Rails 应用程序,所以 created_at 应该是 timestamp
      【解决方案3】:

      formatting 和 postgres 的日期/时间 typesfunctions 之间,您需要确定确切的语法。

      如果您的目标是在 sqlite 和 postgres 之间实现可移植性,一个可能的解决方案是在 postgres 中定义 strftime 函数。

      【讨论】:

        猜你喜欢
        • 2011-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 2021-08-17
        相关资源
        最近更新 更多