MySQLで月ごと・日ごとにレコード取得する方法

例えばこういう場面

  • 現在月のレコードだけ取得したい
  • 特定の日付のレコードだけ取得したい

その方法は意外と簡単でした。

そこで自分へのメモも兼ね、
MySQLで月ごと・日ごとのレコード取得方法を紹介

ここで想定するMySQLテーブルの構成例

こういうテーブルを作ったとします。

▼ テーブル作成のSQL例

名前と登録日時だけを持つ、簡単なユーザーテーブルです。ここで重要になってくるのが登録日時の joined_on カラムです。このDATETIME値を元に月ごと・日ごとの絞り込みをすることになります。

 

そして適当にレコードを挿入

▼ このようなSQLで3件だけ挿入

▼ テーブルの表示結果

id name joined_on
1 Hoge 2020-10-06 12:09:29
2 Fuga 2020-11-17 18:19:59
3 Piyo 2020-12-01 07:08:41

このテーブルを元に説明していきます。

特定の月ごとの条件でレコード取得

まずは月ごとのレコード取得について

これには次の2つの関数が必要です。

▼ 1つめはMONTH関数

MONTH(date)

1 (1 月) から 12 (12 月) の範囲内で、date に対応する月を返します。'0000-00-00' や '2008-00-00' のように月の部分がゼロの場合は、0 を返します。

引用元 : https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_month

▼ 2つめはYEAR関数

YEAR(date)

1000 から 9999 までの範囲内で、date に対応する年を返します。日付が「ゼロ」の場合は、0 を返します。

引用元 : https://dev.mysql.com/doc/refman/5.6/ja/date-and-time-functions.html#function_year

これでアレコレすればできます。

 

実際には次のようなSQLを書いてみました。

▼ 11月のレコードのみ取得

▼ レコードの取得結果

id name joined_on
2 Fuga 2020-11-17 18:19:59

ポイントはWHERE句に対して MONTH(joined_on) = 11  として登録月が11月、そして YEAR(joined_on) = YEAR(CURRENT_DATE())  として現在年を指定していることです。大事なのはそれだけ

 

もちろん現在月での取得も可能です。

▼ こういうSQLを書けばOK

先ほどの MONTH(joined_on) = 11  のところを MONTH(joined_on) = MONTH(CURRENT_DATE())  として現在月での比較にするだけです。

特定の日という条件でレコード取得

先ほどは月ごとのレコード取得でした。

でも当然ながら日ごとの取得も可能です。

例えば次のようなSQLを書けばできます。

▼ 12月01日のみのレコードを取得

▼ レコードの取得結果

id name joined_on
3 Piyo 2020-12-01 07:08:41

これだけ。簡単です。

 

ちなみに現在日での取得もできます。

▼ このようなSQLで取得可能

単純に現在年・月・日を比べるだけです。

色々な場面で使えそうだし、汎用性も高そう。

まとめ - 月ごとのレコード取得は色々な場面で使える

こういう風に月・日ごとのレコード取得は簡単です。

特に月ごとはこういう場面で使うことが多いかも

  • 月ごとにレコードをまとめたり、
  • 特定月のランキングを生成したり、

もちろんSQLを工夫すれば年ごとでも可能です。

以上、MySQLでの月・日ごとレコード取得でした。

間違いがあればご指摘を。ではまた

Shareこの記事をシェアしよう!

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください