【问题标题】:How to search dates in PostgreSQL?如何在 PostgreSQL 中搜索日期?
【发布时间】:2012-07-04 17:57:14
【问题描述】:

我想将在搜索字段中输入的日期(例如 04.07.2012)与我的表格中的日期(datetime 列称为 date)进行比较。但是,我似乎无法直接获得我的 SQL 查询。

我尝试了什么:

find(:all, :conditions => ['\'to_timestamp(date, \'DD Mon YYYY\')\' LIKE \'to_timestamp(?, \'DD Mon YYYY\')\'', '#{query}']) 

但它失败了:

PG::Error: ERROR:  syntax error at or near "DD"
LINE 1: ...s".* FROM "projects"  WHERE ('to_timestamp(date, 'DD Mon YYY...
                                                             ^
: SELECT "pacients".* FROM "projects"  WHERE ('to_timestamp(date, 'DD Mon YYYY')' LIKE 'to_timestamp('#{query}', 'DD Mon YYYY')')

就 (postgre)SQL 而言,我是一个真正的新手,我真的很感激在编写此查询的正确方向上的一些提示。

谢谢一百万!

【问题讨论】:

标签: sql ruby-on-rails database postgresql


【解决方案1】:

正如微薄指出的,这里有几个问题:

  • 不正确的字符串插值
  • 让数据库做更多不必要的工作,当您可以更直接地进行日期搜索时使用LIKE

让 ActiveRecord 格式化日期输入,使用直接 SQL 来比较日期,例如:

start_date = Date.civil(2012, 7, 4)
end_date = Date.civil(2012, 7, 20)
User.where(["date BETWEEN ? AND ?", start_date, end_date])

将源日期和数据库中的日期转换为字符串格式的时间戳,然后使用LIKE 非常迂回,性能也很差。

【讨论】:

  • 谢谢,我最后用的是这个。在我的 project.rb 模型中:def self.search(query) begin if query Project.where(["date BETWEEN ? AND ?", Date.parse(query), Date.parse(query)]) else Project.all end rescue ArgumentError Project.all end
猜你喜欢
  • 1970-01-01
  • 2010-09-26
  • 2013-10-02
  • 2012-09-30
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2019-03-18
  • 2022-01-21
相关资源
最近更新 更多