4

我正在尝试选择日期范围内具有 created_by 属性的所有记录:

@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where("created_at >= #{ @start } and created_at <= #{ @end }")

但是我从 postgres 收到一个错误,上面写着:

PG::Error: ERROR:  syntax error at or near "T00"
LINE 1: ...M "registrations"  WHERE (created_at >= 2013-06-01T00:00:00+...

我一直在搜索这个,但这次谷歌没有通过......

4

4 回答 4

13

在我看来,最好的方法是将where子句中的范围用作:

Registration.where(created_at: @start..@end)

这个查询也不容易受到 SQL 注入的影响,因为@start并且@end已经DateTime在您的查询中进行了类型转换。

于 2013-06-05T19:40:09.547 回答
2

尝试像这样绑定查询参数:

@registrations = Registration.where "created_at >= ? AND created_at <= ?",
                                    params[:start].to_datetime,
                                    params[:end].to_datetime

这允许您以有助于防止 SQL 注入攻击的方式绑定参数。

于 2013-06-05T19:36:30.937 回答
0
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where(created_at: @start..@end)
于 2013-06-05T19:40:15.723 回答
-1
@start = params[:start].to_datetime
@end = params[:end].to_datetime
@registrations = Registration.where("created_at >= '#{@start}' and created_at <= '#{@end}'")
于 2013-06-05T19:36:31.263 回答