gpt4 book ai didi

ruby-on-rails - 如何编写仅查看日期时间字段的时间部分的 activerecord 查询?

转载 作者:行者123 更新时间:2023-12-04 06:09:04 25 4
gpt4 key购买 nike

是否可以执行仅查看日期时间字段的时间部分的 activerecord 查询?

例如Battle.where('start_time < ? and start_time > ?','12:00','06:00')

要查找在早上 6 点到中午 12 点之间开始的所有战斗,而不管它们发生在哪一天?在此示例中,start_time 定义为日期时间。

最佳答案

执行此操作的唯一方法是使用 SQL 函数,如果您使用的是 MySQL,则可以这样做:

Battle.where( 'HOUR( start_time ) >= ? AND HOUR( start_time ) <= ?', 12, 6 )

但这非常低效,并且总是会生成全表扫描,您肯定不希望这样。

最好的解决方案是在您的战斗模型中单独添加具有小时值的列,对其进行索引并直接查询它们,如下所示:

Battle.where( 'start_time_hour >= ? start_time_hour <= ?', 12, 6 )

只需添加一个 before_save 回调来设置此值,然后根据 start_time 属性保存您的 Battle 模型。

编辑

顺便说一句,如果您使用的是 PostgreSQL,它能够为函数的结果创建索引,因此,如果您不介意坚持使用 PostgreSQL,您可以只使用 SQL 函数。在你问之前,不,我不知道它是如何工作的,我只知道数据库允许你这样做,而这在 MySQL 上不可用。

关于ruby-on-rails - 如何编写仅查看日期时间字段的时间部分的 activerecord 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6811480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com