gpt4 book ai didi

ruby-on-rails - 使用 DataMapper 查询查找当月的记录

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

我正在尝试重现我在 ActiveRecord 中使用的这个 SQL 查询:

Post.all(:conditions => ["EXTRACT(MONTH from created_at) = ? AND EXTRACT(YEAR from created_at) = ?", month, year])

但由于我要将所有内容都转换为 DataMapper,所以我一直在寻找一种方法...

有人能帮忙吗?

最佳答案

我推测,因为这是用“ruby-on-rails”标记的,所以您已经加载了 ActiveSupport。这将提供 Time#end_of_month 辅助方法。有了它,您可以将查询重写为:

time = Date.new(year, month).to_time

Post.all(:created_at => time..time.end_of_month)

这不仅更简单,而且从查询中消除了原始 SQL(因此该查询更易于移植到 RDBMS 之外的事物),最重要的是,它可能比其他查询执行得更好。使用 EXTRACT 时,数据库可能必须执行全表扫描以从 每一行 中的 created_at 中提取年份和月份,然后将它们与您的预期值进行比较。如果您有一个大型数据集,这可能会给您的数据库带来很大的负担。但是,如果您的 created_at 列已编入索引,则上述方法相比之下应该非常有效。

关于ruby-on-rails - 使用 DataMapper 查询查找当月的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2258164/

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