0

生年月日(dob)の日が現在から何日も離れたXXの間にあるMySQLデータベースからレコードを取得しようとしています。たとえば、現在から15日後までのすべての誕生日を表示します。私は以下の式を使用していますが、今日の日付が月末に近づくまで機能します。したがって、今日が6月1日で、今から15日間のすべての誕生日を取得したい場合は、問題なく機能します。しかし、今日が6月25日だった場合、15日間の終わりは別の月であるため、レコードは見つかりません。

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-08-27、1982-06-18、1963-07-26などとしてDBに保存されます。私はMONTH-DAY情報にのみ興味があります。

4

2 に答える 2

1

日付はすでに日付形式で保存されているため、現在の日付に15日を追加するだけで、その範囲内の結果を見つけることができます。

SELECT * FROM table WHERE date_col BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 15 DAY)
于 2012-06-22T18:10:29.797 に答える
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日の範囲が2年の間にある場合は翌年)のコンテキストで生年月日を取得します。

生年月日がだったとしましょう1986-07-04。を作成し2012-07-04、現在と15日後の比較は簡単です。

于 2012-06-22T18:10:53.610 に答える