ホームページ >データベース >mysql チュートリアル >年を無視して、今後 14 日以内の記念日を効率的に見つけるにはどうすればよいですか?

年を無視して、今後 14 日以内の記念日を効率的に見つけるにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-03 09:53:43410ブラウズ

How to Efficiently Find Anniversaries Within the Next 14 Days, Ignoring the Year?

日付計算で年を無視する方法

問題:
日付に記念日が含まれる日付を選択してください次の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。