2012-06-22 40 views
0

我期待拉記錄從我的MySQL數據庫,其中日期的出生的(DOB)的日子現在XX很多天了。例如,顯示從現在起至15天之間的所有生日。我使用下面的公式,直到今天的日期更接近月底。所以,如果今天是6月1日,並且我想從現在到15天之間拉出所有的生日......它可以正常工作。但是如果今天是6月25日,那麼會說15天的結束是在另一個月內沒有記錄。顯示MySQL的出生日期記錄從現在XX天

SELECT contacts._id FROM `contacts` LEFT JOIN `groups` ON groups._id = "2" 
WHERE (DAY(`dob`) BETWEEN DAY(CURDATE()) 
AND DAY(ADDDATE(CURDATE(), INTERVAL 15 DAY)) 
AND MONTH(`dob`) BETWEEN MONTH(CURDATE()) 
AND MONTH(ADDDATE(CURDATE(), INTERVAL15 DAY)) 

我也嘗試過使用類似下面的代碼的東西,但它不適用於DOB數據,因爲從未找到當年的年份。所以,這一年必須被忽略。

SELECT contacts._id FROM `contacts` LEFT JOIN `groups` ON groups._id = "2" 
WHERE dob BETWEEN CURDATE() AND CURDATE() + 15 

的日期都存儲在數據庫爲2012年8月27日,1982年6月18日,1963年7月26日,等我只是在月 - 日的信息感興趣。

回答

1

由於您的日期已經存儲在日期格式,只需15天增加至當前的日期,所以你會發現,落在這個範圍之間的結果:

SELECT * FROM table WHERE date_col BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY) 
+0

這就是問題所在。如果我使用CURDATE()類型的查詢,它將不會提取比今天更早的任何日期。因此,例如,1984-02-02將永遠不會在今天和任何未來的日期之間......除非我能夠剝奪年。 – Neon

+0

哎呀。嘗試WHERE SUBSTR(date_col的,6,5)之間SUBSTR(CURDATE(),6,5)和SUBSTR(DATE_ADD(CURDATE(),間隔15天),6,5) – Kermit

+0

良好的漁獲!它現在完美。謝謝! – Neon

1

使用DAYOFYEAR()MAKEDATE()

SELECT 
    a._id 
FROM 
    contacts a 
LEFT JOIN 
    groups b ON b._id = 2 
WHERE 
    MAKEDATE(YEAR(NOW() + INTERVAL 15 DAY), DAYOFYEAR(a.dob)) BETWEEN NOW() AND NOW() + INTERVAL 15 DAY 

說明:

MAKEDATE(YEAR(NOW() + INTERVAL 15 DAY), DAYOFYEAR(a.dob))

這得到的出生日期在今天是什麼日子是一年的方面在(1至365或366),但在明年本年度的背景下(或者如果15天範圍內下降至兩年)。

說的出生日期是1986-07-04。它會創建2012-07-04,從現在到15天之間的比較非常簡單。

相關問題