如何使用SQL

时间:2018-04-08 14:07:59

标签: sql ruby-on-rails ruby date datetime

我使用Ruby on Rails,我有一个Users表,其生日字段是日期类型。

我想要做的是能够在特定用户生日时显示提醒。我意识到我遇到的问题是,在我的所有测试案例中,我今天都会在某人生日那天看看它是否有效,但是如果我今天生日某人生日,但是10年前,我的警报系统因为岁月而停止工作不匹配。

所以基本上,我想让用户过生日,但只有日期和月份,并检查它是否与今天和月份匹配。我应该使用某种原始查询,还是应该考虑别的什么?

3 个答案:

答案 0 :(得分:1)

您可以使用:

select t.*
from t
where month(t.dob) = month(curdate()) and day(t.dob) = day(curdate());

注意:大多数数据库都支持month()day()。所有都具有此功能,但确切的功能可能取决于数据库。

答案 1 :(得分:0)

您可以参考此https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html来获取日期时间的日期和月份

答案 2 :(得分:0)

通过将数据库的月份和日期提取方法传递到User.where,可以以Rails方式执行此操作。

例如,为了让用户在2月14日出生在SQLite3中:

User.where("strftime('%m %d', birthday) = ?", "02 14")
MySQL中的

User.where("month(birthday) = ? AND day(birthday) = ?", "02", "14")`
在Postgres中

User.where("date_part('month', birthday) = ? AND date_part('day', birthday) = ?", "02", "14")

上述代码段假设users表格中的列名为birthday