2012-07-03 103 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最好。