データベースを操作する場合、日付値に基づいてデータをフィルター処理することはよく行われます。たとえば、特定の時間枠からデータを取得したり、特定の日付に基づいて結果を集計したり、時間の経過に伴う傾向パターンを特定したり、その他の時間関連の操作を行うことができます。
したがって、これはデータベース開発者にとって重要なスキルです。 SQL は、特定のデータセット内の日付をフィルタリングするためのさまざまなツールを提供します。
この投稿では、SQL の世界で日付をフィルター処理するために使用できるさまざまな方法とテクニックを探索します。
前提条件:
実際の例とアプリケーションに入る前に、これに必要なものを説明しましょう。
この記事では、ほぼすべての SQL データベースに適用できる方法を順守していきます。ただし、デモンストレーションの目的で、MySQL バージョン 8 とSakila サンプル データベースを使用します。
ただし、必要なデータセットを自由にダウンロードして使用することができます。提供されたメソッドが他のデータベースでも機能するかどうかを必ず指摘し、代替手段があれば提供します。
特定の日付をフィルタリングする
最も基本的な日付フィルタリング操作は、特定の日付の 1 つまたは複数のレコードを取得する必要がある場合です。
このような場合、WHERE 句の後に日付列と取得する実際の日付値を使用できます。
たとえば、2005 年 5 月 24 日に発生したレンタル記録を調べたいとします。次のようにクエリを実行できます。
選択する *レンタルから
WHERE レンタル日 = 「2005-05-24 23:03:39」 ;
この場合、フィルター処理する日付をタイムスタンプ値として指定します。これは、「rental_date」列に値がタイムスタンプとして保存されているためです。
日付範囲をフィルタリングする
2 番目の一般的な操作は、特定の日付範囲に基づいてデータをフィルター処理することです。たとえば、2005 年 5 月から 2005 年 6 月の間に発生したレンタルを取得したいとします。
次のようにクエリを実行できます。
選択する*
から
レンタル
どこ
レンタル日 BETWEEN 「2005-04-01 00:00:00」 そして 「2005-06-01 00:00:00」 ;
この場合、AND 演算子を使用して 2 つの値を結合します。 WHERE 句は、「rental_date」列の値が 2 つの範囲内になければならない場合に使用されます。
出力例は次のとおりです。
日付コンポーネントをフィルタリングする
他の場合には、リテラル値を使用して日付範囲を使用する代わりに、値から特定の日付コンポーネントを抽出し、それに基づいてフィルターをかけることができます。
たとえば、2005-04-01 と 2005-06-01 を指定する代わりに、5 月を抽出し、その月内のデータをフィルターできます。
MySQL では、次の例に示すように、MONTH() 関数のような関数を使用してこれを実現できます。
選択する*
から
レンタル
どこ
月 ( レンタル日 ) = 5 ;
この場合、MONTH(rental_date) は日付から月の部分を抽出します。次に、この値を使用して、値が 5 月に等しい場所をフィルターできます。
結論
このチュートリアルでは、SQL の最も基本的で一般的なタスクの 1 つである、日付値に基づいてデータをフィルター処理することについて学びました。日付からさまざまなコンポーネントを抽出し、それを使用して日付などをフィルター処理する方法を学びました。