所以我有这个名为SeasonRate的表
create_table "season_rates", force: :cascade do |t|
t.string "title"
t.datetime "from_date"
t.datetime "to_date"
t.float "rate"
t.integer "property_type_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["property_type_id"], name: "index_season_rates_on_property_type_id", using: :btree
end
我希望能够找到今天的日期落在from_date
和to_date
之间的行,忽略年份。到目前为止,使用this我已经能够编写此代码
def todays_rate(apartment)
property_type = apartment.property_type_id
@rate = SeasonRate.where(property_type_id: property_type)
@todays_rate = @rate.where("extract (DOY FROM TIMESTAMP from_date) <= extract (DOY FROM TIMESTAMP ?) AND extract (DOY FROM TIMESTAMP to_date) >= extract (DOY FROM TIMESTAMP ?)",Date.today, Date.today)
end
但它给我错误说
PG :: SyntaxError:ERROR:“from_date”或附近的语法错误 第1行:... ty_type_id“= $ 1 AND(提取(DOY来自TIMESTAMP from_date)... ^ :SELECT“season_rates”。* FROM“season_rates”WHERE“season_rates”。“property_type_id”= $ 1 AND(提取(DOY FROM) TIMESTAMP from_date)&lt; =提取(DOY来自TIMESTAMP'2017-08-04')和 提取物(DOY FROM TIMESTAMP to_date)&gt; =提取物(DOY来自TIMESTAMP '2017年8月4日'))
我已经搜索了这个问题很多,但我找不到任何解决方案。请帮助我在这里做错了什么,或者如果你有更好的解决方案来解决这个问题,那就太好了。非常感谢你。
答案 0 :(得分:1)
我可能是错的,但看起来添加TIMESTAMP
告诉Postgres将字符串转换为时间戳,然后你不给它一个字符串,你给它一个列名,因此语法错误:
select EXTRACT(DOY FROM TIMESTAMP created_at), created_at from users;
ERROR: syntax error at or near "created_at"
LINE 1: select EXTRACT(DOY FROM TIMESTAMP created_at), created_at fr...
但你可以给它列名而不是要转换的字符串,它似乎工作正常
select EXTRACT(DOY FROM created_at), created_at from users;
date_part | created_at
-----------+----------------------------
190 | 2017-07-09 21:07:41.746157