当前位置: 首页 > 面试题库 >

mySQL SELECT即将到来的生日

濮阳驰
2023-03-14
问题内容

我正在尝试编写查询以选择其生日在未来7天内的数据库用户。

我已经做了很多研究,但无法提出可行的解决方案。

生日字段存储为varchar,例如‘04 / 16/93’,有什么办法可以使用?

这是我到目前为止的内容:

SELECT * 
FROM   `PERSONS` 
WHERE  `BIRTHDAY` > DATEADD(DAY, -7, GETDATE())

我应该说得更清楚一些,我想找到生日而不是生日。所以我只是在寻找几天和几个月而不是几年。


问题答案:

要获得接下来7天内的所有生日,请将出生日期和今天之间的年份差值与出生日期相加,然后查找是否在接下来的7天内。

SELECT * 
FROM  persons 
WHERE  DATE_ADD(birthday, 
                INTERVAL YEAR(CURDATE())-YEAR(birthday)
                         + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                YEAR)  
            BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY);

如果要排除今天的生日,请更改>>=

SELECT * 
FROM  persons 
WHERE  DATE_ADD(birthday, 
                INTERVAL YEAR(CURDATE())-YEAR(birthday)
                         + IF(DAYOFYEAR(CURDATE()) >= DAYOFYEAR(birthday),1,0)
                YEAR)  
            BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY);

-- Same as above query with another way to exclude today's birthdays 
SELECT * 
FROM  persons 
WHERE  DATE_ADD(birthday, 
                INTERVAL YEAR(CURDATE())-YEAR(birthday)
                         + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                YEAR) 
            BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
     AND DATE_ADD(birthday, INTERVAL YEAR(CURDATE())-YEAR(birthday) YEAR) <> CURDATE();


-- Same as above query with another way to exclude today's birthdays 
SELECT * 
FROM  persons 
WHERE  DATE_ADD(birthday, 
                INTERVAL YEAR(CURDATE())-YEAR(birthday)
                         + IF(DAYOFYEAR(CURDATE()) > DAYOFYEAR(birthday),1,0)
                YEAR) 
            BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY)
     AND (MONTH(birthday) <> MONTH(CURDATE()) OR DAY(birthday) <> DAY(CURDATE()));

这是所有查询的演示



 类似资料:
  • 问题内容: 我有用于阅读联系方式和阅读生日的代码。但是,如何按即将到来的生日顺序获取联系人列表? 对于由标识的单个联系人,我将获得以下详细信息和生日: 读取所有联系人的代码是: 问题答案: 我以相反的方式进行了此操作-直接选择存储生日的数据表。 } SELECT被两次调用-从今天到12/31的一次呼叫,从01/01到今天的第二次呼叫。我限制返回的行数为10,但这不是必需的。 编辑: 我发现这不适用

  • 问题内容: 我有下表的人和他们的生日: 而且我不知道如何根据生日离今天有多近来对名字进行排序。因此,对于NOW()= 2011-09-08,排序结果应为: 我正在寻找一个快速的技巧,并不真正在意性能(宠物项目-表将容纳少于1000条记录),但是当然每个建议都会受到赞赏。 问题答案: 这是一种方法: 计算 当前年份 - 出生年份 将得出的年数加上 出生日期 您现在有今年的生日,如果这个日期过去了,再

  • 使用Microsoft图形API,我想创建所有Office 365用户生日的列表,但目前无法获取具有相关属性的用户列表。 要设置此列表,我需要通过Graph API公开以下属性: id displayName 用户名称 生日 使用图形浏览器,https://graph.microsoft.io/en-us/graph-explorer,我已尝试请求我自己的属性(graph.microsoft.co

  • 问题内容: 我正在寻找有关如何使用即将到来的jsr166y(叉形联接,栅栏)和extras166y(ParallelArray等)的井井有条的信息源-从教程到专家级。 问题答案: IBM Developerworks网站上有一个很好的系列文章,但是我发现的最有用的资料是Brian Goetz的演示文稿,非常值得您花一个小时的时间。他花了前25分钟的时间谈论背景,然后介绍了新框架的一些很好的例子。

  • 在我的项目新日期();以其他语言提供日期。并且给出了错误,请问有没有人能提供将飞镖转换成英文的解决方案? 我的代码如下: org.postgresql.util.psqlexception:错误:类型日期的输入语法无效:“--”位置:136 org.postgresql.core.v3.QueryExecutorImpl.receiveerrorresponse(QueryExecutorImpl

  • 如何阅读android中所有即将到来的通知?是否可以使用广播接收器收听传入的通知,以及读取通知信息的能力。