将postgres VARCHAR查询转换为ruby activerecord

时间:2012-07-03 16:34:00

标签: ruby postgresql activerecord

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

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 个答案:

答案 0 :(得分: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查看哪个版本效果最佳。