0

我需要将以下 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.% 的数据。我可以做时间范围部分,但不知道如何翻译查询的后半部分。

谢谢

4

1 回答 1

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 以查看哪个版本效果最好。

于 2012-07-03T18:32:02.573 回答