我有日期字段,我查詢在7天之前在mysql中選擇生日。如何在mysql中選擇今天的7天之前的生日
例如 如果
誕生= 1986年8月5日
如果現在2012-07-30此查詢報警我。 或
誕生= 1986年1月5日
如果現在2012-12-30此查詢報警我。 出生是user_table
的字段。
我有日期字段,我查詢在7天之前在mysql中選擇生日。如何在mysql中選擇今天的7天之前的生日
例如 如果
誕生= 1986年8月5日
如果現在2012-07-30此查詢報警我。 或
誕生= 1986年1月5日
如果現在2012-12-30此查詢報警我。 出生是user_table
的字段。
我發現我對這個目標選擇。
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)
感謝您的幫助。
這樣的事情?
SELECT user_name, DATE_SUB(birth, INTERVAL 7 DAYS) as SevenDaysBefore from user_table
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
@aya:爲什麼不接受? – ysth
如果您想要可重複使用的代碼並希望保持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());
感謝。但是當日期是週年紀念前的7天時,我想要這個查詢報警 – aya