【问题标题】:Ruby strftime '%-m' not working in queryRuby strftime '%-m' 在查询中不起作用
【发布时间】:2015-06-26 16:05:41
【问题描述】:

我的目标是通过用户 ID、创建年份和创建月份来查询项目。我在 Heroku 上的开发中使用 sqlite3,在生产中使用 postresql。

我想做这样的事情:

items.where("user_id = '?' AND strftime('%Y', created_at) = '?' AND strftime('%-m', created_at) = '?' ", 6, 2015, 3)

但它不返回任何记录。

这行得通:

items.where("user_id = '?' AND strftime('%Y', created_at) = '?' ", 6, 2015)

但这不会返回任何记录:

items.where("user_id = '?' AND strftime('%-m', created_at) = '?' ", 6, 3)

我是否错误地使用了'%-m' 格式?

【问题讨论】:

  • 不要为? 使用引号。 SQLite3 可能是可以原谅的;不是一般的。 %-m 格式是什么?我从未见过它,也无法在docs 中找到它。 (注意:你写的是 SQL,所以是 SQLite3 strftime,不是 Ruby strftime。)
  • 请注意,strftime 是一种 SQLite 主义,用于解决缺乏本地时间类型的问题,这对于 PostgreSQL 根本不起作用。帮自己一个忙,在本地安装 PostgreSQL,这样您就可以使用同一个数据库进行开发、测试和部署。
  • 您是否有充分的理由不在开发中使用 postgresql?当然,这样的问题突出了为什么在所有环境中使用相同的技术真的很有用?

标签: ruby-on-rails ruby sqlite strftime


【解决方案1】:

我不会在开发和生产中使用不同的数据库,使用同一个。只需在本地主机上配置 postgresql 并将查询更改为:

user.items.where("date_part('year', created_at) = :year AND date_part('month', created_at) = :month", year: 2015, month: 6)

假设您已经设置了项目和用户之间的关联,那么您也不需要查询user_id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2014-08-29
    • 2012-09-15
    • 1970-01-01
    • 2016-06-03
    • 2018-09-30
    相关资源
    最近更新 更多