はあなたがDOBない計算フィールドに基づいてフィルタリングを行う必要があります - 受け入れ答えの光で
SELECT name, DOB
FROM animal
WHERE colour = 'Brown'
AND DOB > (CURRENT_DATE - INTERVAL 3 YEAR);
EDITを私は私の答えを説明する必要性を感じています。使用 - それは年齢が無用DOBコラム上の任意のインデックスをレンダリング、比較を行うために計算することが必要なため、年齢をフィルタリングするための方法として
where colour = 'Brown' and truncate(datediff(sysdate(),DOB)/365.25,0) <=2;
は効率的ではありません。一方で、その後、任意の適用可能なインデックスを使用することができます直接DOBフィールド上でフィルタリング -
DOB > (CURRENT_DATE - INTERVAL 3 YEAR);
これは、単純に言うと、「誕生日は今日マイナス3年以上です」。
順番になっ
'2009-03-22' > ('2012-03-22' - INTERVAL 3 YEAR)
- -
評価さ
'2009-03-22' > '2009-03-22'
だから、「2009年3月22日」の誕生日と「2012-03-22」は現在の日付があると評価されますその人は今3(今日)であるので、偽にする。順番になる
'2009-03-23' > ('2012-03-22' - INTERVAL 3 YEAR)
- -
真と評価
'2009-03-23' > '2009-03-22'
人の誕生日は明日( '2009-03-23')であれば、一方で彼らはまだ2です。
を行う場所でのselect句のこのエイリアスを使用することはできません、それははるかに容易になるだろう。 –