作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在尝试编写查询以选择生日在未来 7 天内的数据库用户。
我做了很多研究,但我无法提出可行的解决方案。
生日字段存储为 varchar,例如 '04/16/93' 有什么方法可以处理这个吗?
这是我目前所拥有的:
SELECT *
FROM `PERSONS`
WHERE `BIRTHDAY` > DATEADD(DAY, -7, GETDATE())
我应该说得更清楚,我正在尝试查找生日而不是出生日期。所以我只是在寻找几天和几个月而不是几年。
最佳答案
要获取 future 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()));
这里是 DEMO在所有查询中
关于mySQL SELECT 即将到来的生日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18747853/
我遇到过 WinAPI 的奇怪行为,在我看来是这样。在我的程序中,我为窗口设置了一个计时器 ::SetTimer(window_handle, timer_id, 10, NULL); 并在我的窗口过
我是一名优秀的程序员,十分优秀!