我想找到所有的人,他们的生日在当前一周。例如,我们现在是星期二,所以我想要从昨天(星期一)到星期天的所有生日。我尝试了以下查询:
SELECT * FROM `employees` WHERE WEEK( birthdate ) = WEEK( NOW() )
字符串但这并没有给我正确的数据,因为我也ge记录了出生日期是1975-03-29,这是下周,而不是本周。
1975-03-29
de90aj5v1#
您需要将年份差异添加到生日:
SELECT * FROM `employees` WHERE WEEK(NOW()) = WEEK( birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthday)) YEAR )
字符串但是这对于一年的第一周和最后一周是不正确的,所以你需要计算这周的日期星期一和星期天。今年生日:
SELECT e.*, birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR FROM employees e;
型本周星期一:
SELECT DATE(now() - INTERVAL WEEKDAY(NOW()) DAY);
型本周周日:
SELECT DATE(NOW() + INTERVAL 6 - WEEKDAY(NOW()) DAY);
型最终查询:
SELECT * FROM employees WHERE DATE(birthdate + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR) BETWEEN DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY) AND DATE(NOW() + INTERVAL 6 - WEEKDAY(NOW()) DAY);
型演示:http://rextester.com/GCC5014702/29仍然有一个问题。这个查询会“说”今年的生日是02/28。虽然它可能应该是03/01。要解决这个问题,你可以使用以下“技巧”:
SELECT e.*, birthdate - INTERVAL 1 DAY + INTERVAL (YEAR(NOW()) - YEAR(birthdate)) YEAR + INTERVAL 1 DAY FROM employees e;
型演示:http://rextester.com/WHI96898
dvtswwa32#
SELECT nama , tanggal_lahir FROM m_pasien WHERE MONTH(tanggal_lahir) = MONTH(CURDATE()) AND DAY(tanggal_lahir) >= DAY(CURDATE()) AND DAY(tanggal_lahir) <= DATE_ADD(CURDATE(), INTERVAL 7 DAY);
字符串
2条答案
按热度按时间de90aj5v1#
您需要将年份差异添加到生日:
字符串
但是这对于一年的第一周和最后一周是不正确的,所以你需要计算这周的日期星期一和星期天。
今年生日:
型
本周星期一:
型
本周周日:
型
最终查询:
型
演示:http://rextester.com/GCC50147
02/29仍然有一个问题。这个查询会“说”今年的生日是02/28。虽然它可能应该是03/01。要解决这个问题,你可以使用以下“技巧”:
型
演示:http://rextester.com/WHI96898
dvtswwa32#
字符串