如何在mysql中今天7天前选择生日

时间:2012-12-20 07:08:28

标签: mysql date

我有日期字段,我查询在mysql中选择7天之前的生日。

例如,

如果

  

出生= 1986-08-05

如果现在是2012-07-30这个查询报警我。 或

  

出生日期= 1986-01-05

如果现在是2012-12-30这个查询报警我。 出生是user_table的领域。

4 个答案:

答案 0 :(得分:1)

select * from user_table
where date_format(date_sub(birth, interval 7 days), "%m-%d")
    = date_format(now(), "%m-%d")
   or date_format(date_sub(birth, interval 7 days), "%m-%d") = '02-29'
  and month(now()) = 2 and month(date_add(now(), interval 1 day)) = 3

答案 1 :(得分:1)

我找到了我的目标选择。

select *,birthdate,
concat(if(date_format(birthdate, '%m') = '12',date_format(curdate(), "%Y")
,date_format(now(), "%Y")),
date_format(date_add(curdate(), interval 7 day), '%Y')) as birthday 
from users 
HAVING birthday BETWEEN curdate() and date_add(curdate(), interval 7 day)

感谢您的帮助。

答案 2 :(得分:1)

如果您需要可重用的代码并希望保持SQL易于阅读和维护,请使用SQL函数。生日是周年纪念日,所以......

DROP FUNCTION IF EXISTS anniversary_after;
DELIMITER $$
CREATE FUNCTION anniversary_after(anydate DATE, after DATE)
RETURNS DATE DETERMINISTIC
BEGIN
  DECLARE anniversary DATE;
  DECLARE years INTEGER;
  SET years = YEAR(after) - YEAR(anydate);
  SET anniversary = DATE_ADD(anydate, INTERVAL years YEAR);
  IF anniversary < after THEN
    SET anniversary = DATE_ADD(anniversary, INTERVAL 1 YEAR);
  END IF;
  RETURN anniversary;
END
$$
DELIMITER ;


DROP FUNCTION IF EXISTS anniversary;
CREATE FUNCTION anniversary(anydate DATE)
RETURNS DATE DETERMINISTIC
RETURN anniversary_after(anydate, CURRENT_DATE());

显示下一个周年纪念日:

SELECT anniversary('1994-04-05');

显示直到下一周年的日子:

SELECT DATEDIFF(anniversary('1994-04-05'), CURRENT_DATE());

答案 3 :(得分:0)

这样的事情?

SELECT user_name, DATE_SUB(birth, INTERVAL 7 DAYS) as SevenDaysBefore from user_table