gpt4 book ai didi

ruby-on-rails - 使用 Rails 3.1 ActiveRecord 查询查找年度日期

转载 作者:行者123 更新时间:2023-12-02 21:19:32 29 4
gpt4 key购买 nike

我正在构建一个 Rails 3.1 项目,其中我的模型之一包含生日属性。我一直在尝试找到一个查询,该查询本质上可以找到生日在特定范围内的所有用户。问题是应用程序的这一部分并不真正关心出生年份,只关心月份和日期。不幸的是,Google 在这方面并没有提供太多帮助。

有谁知道如何查询某个日期范围内生日属性为“有周年纪念日”的所有记录吗?我希望这是有道理的!

最佳答案

听起来您正在寻找 EXTRACT :

M.where(%q{
array[extract(month from d)::int, extract(day from d)::int] between array[?, ?] and array[?, ?]
}, lower_month, lower_day, upper_month, upper_day)

其中 M 是您的模型,bday 是生日列,上部和下部变量保存月份和日期边界。您还可以使用INTERSECT :

M.find_by_sql([%q{
select * from ms where array[? ,?] <= array[extract(month from bday)::int, extract(day from bday)::int]
intersect
select * from ms where array[?, ?] >= array[extract(month from bday)::int, extract(day from bday)::int]
}, lower_month, lower_day, upper_month, upper_day])

另一个版本将使用 to_char :

M.where(
"to_char(bday, 'MM') || to_char(bday, 'DD') between ? and ?",
'%2.2d%2.2d' % [lower_month, lower_day],
'%2.2d%2.2d' % [upper_month, upper_day]
)

您也可以使用一大堆丑陋的 CASE 语句得到相同的结果(这样您就只考虑月份边界处的日期),但交集(IMO)更干净且更易于阅读。使用 (PostgreSQL) 数组允许您将月/日对作为单个单位而不是单独进行比较。

关于ruby-on-rails - 使用 Rails 3.1 ActiveRecord 查询查找年度日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405793/

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