![](/img/trans.png)
[英]Ruby on Rails query by datetime range ( last 24, 48, etc… hours )
[英]Syntax Error in Datetime range Query in Ruby on Rails
我正在执行一个ruby查询:
Timeslot.where("start_date >= ? AND end_date <= ?", Wed, 01 Jul 2015 18:00:00 SGT +08:00, Wed, 01 Jul 2015 21:00:00 SGT +08:00)
我收到以下错误
SyntaxError: unexpected tCONSTANT, expecting ')'
...AND end_date <= ?", Wed, 01 Jul 2015 18:00:00 SGT +08:00, We...
我想这是因为我没有在星期三之后转义','字符。 我有两个问题:
1)如何更正此查询? 2)我将使用实际的datetime变量替换2015年7月1日星期三18:00:00 SGT +08:00吗? 如果datetime是变量而不是常量,如何以正确的方式键入此查询?
我会这样写:
Timeslot.where(
'start_date >= ? AND end_date <= ?',
Date.parse('Wed, 01 Jul 2015 18:00:00 SGT +08:00'),
Date.parse('Wed, 01 Jul 2015 21:00:00 SGT +08:00')
)
看来您必须将字符串date转换为正确的日期格式才能执行查询操作。 就像您在UTC时区中设置日期一样,最好使用Time
对象并将其转换为正确的日期格式,然后在查询中使用该日期格式,
str = "Tue, 10 Aug 2010 01:20:19 +0400"
puts Date.parse str
2010-08-10
puts Date.parse(Time.parse(str).utc.to_s)
2010-08-09
您是否输入了参数Wed,01 Jul 2015 18:00:00 SGT +08:00不带引号?
我想如果您想使用该格式。 尝试这个。
"Wed, 01 Jul 2015 18:00:00 SGT +08:00".to_time()
# to_time() method converted to Time Class (timezone is followed by rails setting)
要么
"2015-07-01 18:00:00".to_time() # works well.
使用日期时间 ...
start_date=DateTime.parse(Wed, 01 Jul 2015 18:00:00 SGT +08:00)
end_date=DateTime.parse(Wed, 01 Jul 2015 21:00:00 SGT +08:00)
Timeslot.where("start_date >= ? AND end_date <= ?",start_date,end_date)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.