ruby-on-rails - 如何根据确切的年份过滤用户,并将日期作为数据库中的列?
问题描述
例如,如果用户正好 5 岁,我想在我的模型上使用 SQL 命令过滤用户。我怎样才能做到这一点?范围查询有效,但删除范围不会返回任何内容。
这可行,但我希望它准确地输出 21 岁(如果生日是 1997/01/01)并且它不应该包括 22 岁。
users = users.where(["birthdate >= ? AND birthdate <= ?", 22.years.ago + 1.day, 21.years.ago])
我试过这个,但它没有输出任何东西:users = users.where(["birthdate = ?", 21.years.ago])
用户架构
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.string "position"
t.string "employee_id"
t.string "first_name"
t.string "middle_name"
t.string "last_name"
t.string "gender"
t.string "address"
t.string "sss_number"
t.string "tin_number"
t.string "phil_health"
t.string "emergency_name"
t.string "emergency_contact"
t.date "birthdate"
t.date "date_hired"
t.string "role", default: "user"
t.integer "department_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
结尾
解决方案
您可以使用Range
和 方法beginning_of_year
和end_of_year
,如下所示:
date = 22.years.ago #example
User.where(birthdate: date.beginning_of_year..date.end_of_year)
推荐阅读
- java - Spring Boot Active Directory 仅在未受保护的端点上进行验证
- java - @QuarkusTest - 在测试中实现带有注释 @RegisterRestClient 的接口 - 测试失败
- c# - 如何在 ASP.NET Core 3 中解析本地文件路径?
- python-3.x - 如何准备和比较 Pandas 中的两个数据框与未对齐的数据集
- object - OPC UA和OOP的区别
- groovy - ODI 12c Groovy - 自动生成具有两个物理层的映射场景
- r - 将 grep() 系列函数与条件 if 语句相结合
- python - 基于另一个数据框将值从一列滚动到另一列
- winforms - Ping 多个 IP/主机名
- javascript - 使 DOM 元素在没有“固定”计算样式的情况下显示为固定位置?