2012-12-20 79 views
1

我有日期字段,我查詢在7天之前在mysql中選擇生日。如何在mysql中選擇今天的7天之前的生日

例如 如果

誕生= 1986年8月5日

如果現在2012-07-30此查詢報警我。 或

誕生= 1986年1月5日

如果現在2012-12-30此查詢報警我。 出生是user_table的字段。

回答

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) 

感謝您的幫助。

0

這樣的事情?

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

感謝。但是當日期是週年紀念前的7天時,我想要這個查詢報警 – aya

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 
+0

@aya:爲什麼不接受? – ysth

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()); 
相關問題