ホームページ >データベース >mysql チュートリアル >年を無視して、今後 14 日以内の記念日を効率的に見つけるにはどうすればよいですか?
日付計算で年を無視する方法
問題:
日付に記念日が含まれる日付を選択してください次の 14 日間 (年のコンポーネントを除く)。
オリジナルクエリ:
SELECT * FROM events WHERE EXTRACT(month FROM "date") = 3 AND EXTRACT(day FROM "date") < EXTRACT(day FROM "date") + 14
問題:
月が経過するため、このクエリは現在の期間の終了後に発生する記念日を見逃す可能性があります。
解決策:
1. Generate Series の使用:
SELECT * FROM events WHERE (date > '2013-03-01' AND date < '2013-04-01')
このクエリは、日付範囲を明示的に指定することで年を無視します。ただし、さまざまな記念日期間には柔軟に対応できません。
2.日付計算の使用:
SELECT event_date FROM event_table WHERE (event_date >= CURRENT_DATE AND event_date <= CURRENT_DATE + INTERVAL '14 days');
このクエリは、日付計算を使用して記念日の日付範囲を計算します。より柔軟ですが、大きなテーブルの場合はパフォーマンスが遅くなる可能性があります。
3.関数の使用 (推奨):
CREATE FUNCTION get_anniversary(date date) RETURNS date AS BEGIN RETURN date PARTITION BY YEAR; END; SELECT event_date FROM event_table WHERE get_anniversary(event_date) >= CURRENT_DATE AND get_anniversary(event_date) <= CURRENT_DATE + INTERVAL '14 days';
このクエリは、関数を使用して日付から年を削除します。一意の年ごとにパーティションが作成されるため、大きなテーブルの処理が高速になります。
以上が年を無視して、今後 14 日以内の記念日を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。