【问题标题】:How to parse through a date field using SQL如何使用 SQL 解析日期字段
【发布时间】:2018-04-08 14:07:58
【问题描述】:

我正在使用 Ruby on Rails,并且我有一个用户表,其中有一个生日字段类型为日期。

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

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

【问题讨论】:

  • 你的生日字段实际上是一个生日字段。
  • “使用 SQL” – 特别是什么数据库? MySQL、PostgreSQL、SQLite 还是其他?

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


【解决方案1】:

你可以使用:

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

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

【讨论】:

  • 非常感谢朋友
  • 请记住,数据库时间和 Rails 时间可能不同。
【解决方案2】:

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

【讨论】:

  • 这基本上是一个仅链接的答案。您能否提供更多细节或代码示例?
【解决方案3】:

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

例如,在 SQLite3 中获取 2 月 14 日出生的用户:

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")

上述 sn-ps 假设您的 users 表中的列名为 birthday

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多