2012-07-03 68 views
0

我需要将以下postgreSQL查询转换为activerecord ruby​​查询。将postgres VARCHAR查询转换为ruby activerecord

select * 
from my_table 
where (my_time between '2010-12-27 00:00:00' and '2011-01-28 00:00:00') 
    and (my_time::TIME)::VARCHAR like '12:00:00.%'; 

这样可以取出每天12:00:00%的数据。我可以做时间范围部分,但不知道如何翻译下半部分的查询。

感谢

+1

对于不同的语言设置,演员阵容可能无法正常工作。您应该使用格式掩码而不是隐式转换来使用to_char()。 –

+0

是否有可能将其转换为ruby activerecord语句? – user1499386

+0

也许这会有帮助吗? http://stackoverflow.com/questions/4430578/how-to-do-a-like-query-in-arel-and-rails-3 – Casper

回答

1

你可以使用to_char您的时间戳转换为相应的字符串形式和剥离小数秒同时:

where to_char(my_time, 'HH24:MM:SS') = '12:00:00' 
... 

的是,ActiveRecord的版本是非常简单的:

MyTable.where("to_char(my_time, 'HH24:MM:SS') = '12:00:00'") 

然后链接您现有的BETWEEN检查。

你也可以使用extract分别检查各个时间部分:

where extract(hour from my_time) = 12 
    and extract(minute from my_time) = 0 
    and extract(second from my_time) = 0 
    ... 

的是,ActiveRecord的版本是:

MyTable.where('extract(hour from my_time) = ?', 12) 
     .where('extract(minute from my_time) = ?', 0) 
     .where('extract(second from my_time) = ?', 0) 

你得问EXPLAIN,看看哪个版本的Works最好。