繁体   English   中英

Ruby on Rails中日期时间范围查询中的语法错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM