1

私は以前にSOについて知らされていましたが、これを行う正しい方法は次のとおりです。

WHERE birth_date BETWEEN date_sub(curdate(), INTERVAL 25 YEAR) 
                     AND date_sub(curdate(), INTERVAL 30 YEAR)

ただし、実際には30歳以上31歳未満のユーザーは含まれません。一般的に年齢について言えば、30歳11か月のユーザーを「30」と見なします。

そのことを念頭に置いて、2番目の間隔31(意図したよりも1年多い)を単純に作成することは明らかな解決策のように思えますが、今日31歳になったユーザーも含まれるため、それは良くありません。

では、MySQLに生年月日がタイプとして保存されている場合に、年齢が25歳以上31歳未満のユーザーを見つけるための最も確実最速の方法は何でしょうか。date

4

2 に答える 2

3

次のように、2つの日付を切り替えるだけで、最初の日付に別の日が追加されます。

WHERE birth_date 
BETWEEN 
    date_add(
        date_sub(curdate(), INTERVAL 31 YEAR), 
        INTERVAL 1 DAY
    )
AND date_sub(curdate(), INTERVAL 25 YEAR) 

他の提案された答えを見ると、実際にはもっと簡単な解決策があります。

WHERE birth_date <= date_sub(curdate(), INTERVAL 25 YEAR) 
      AND birth_date > date_sub(curdate(), INTERVAL 31 YEAR)

>2番目の比較では、1 DAY間隔を追加する手間が省けますが、30ではなく31YEARを使用する必要があることに注意してください。BETWEEN AND式は>=andを実行し<=ます。

(それが正しいことが証明され、彼/あなたが比較を編集し、30から31に変更したときに彼の答えを受け入れてください-彼は私を正しい方向に向けました)

于 2013-03-10T01:32:39.387 に答える
1

特にその奇妙なエッジの振る舞いでは、通常の比較が行われる日付に使用する必要はありませんBETWEEN

WHERE birth_date <= date_sub(curdate(), INTERVAL 25 YEAR) 
      AND birth_date >= date_sub(curdate(), INTERVAL 30 YEAR)
于 2013-03-10T01:34:55.807 に答える