我需要将以下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%的数据。我可以做时间范围部分,但不知道如何翻译查询的后半部分。
由于
答案 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查看哪个版本效果最佳。