MySQLで特定の月の日数を取得する方法|LAST_DAY関数の使い方を解説
MySQLである月が何日あるのか(その月の日数)を調べたい場合、LAST_DAY()関数とDAY()関数を組み合わせることで簡単に実現できます。LAST_DAY()は指定した日付が属する月の最終日を返し、そこからDAY()で「日」の部分を取り出すことで、その月の日数が求まります。
基本構文
SELECT DAY(LAST_DAY(カラム名)) AS 別名 FROM テーブル名;
動作確認用テーブルの作成
まず、実際に構文を理解するためにテーブルを作成してみましょう。以下のクエリでテーブルを作成します。
mysql> CREATE TABLE DaysInaGivenMonth -> ( -> MonthName datetime -> ); Query OK, 0 rows affected (1.62 sec)
テストデータの挿入
次に、INSERTコマンドを使って現在の日付と、過去5か月分の日付を登録します。
mysql> INSERT INTO DaysInaGivenMonth VALUES(now()); Query OK, 1 row affected (0.24 sec) mysql> INSERT INTO DaysInaGivenMonth VALUES(date_add(now(), interval -1 month)); Query OK, 1 row affected (0.16 sec) mysql> INSERT INTO DaysInaGivenMonth VALUES(date_add(now(), interval -2 month)); Query OK, 1 row affected (0.10 sec) mysql> INSERT INTO DaysInaGivenMonth VALUES(date_add(now(), interval -3 month)); Query OK, 1 row affected (0.20 sec) mysql> INSERT INTO DaysInaGivenMonth VALUES(date_add(now(), interval -4 month)); Query OK, 1 row affected (0.23 sec) mysql> INSERT INTO DaysInaGivenMonth VALUES(date_add(now(), interval -5 month)); Query OK, 1 row affected (0.15 sec)
登録データの確認
SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。
mysql> SELECT * FROM DaysInaGivenMonth;
実行結果は以下の通りです。
+---------------------+ | MonthName | +---------------------+ | 2019-01-01 21:34:26 | | 2018-12-01 21:34:55 | | 2018-11-01 21:35:14 | | 2018-10-01 21:35:20 | | 2018-09-01 21:35:23 | | 2018-08-01 21:35:27 | +---------------------+ 6 rows in set (0.00 sec)
各月の日数を取得するクエリ
それでは、上記で登録した各月の日数を求めるクエリを実行します。
mysql> SELECT DAY(LAST_DAY(MonthName)) AS DaysInMonth FROM DaysInaGivenMonth;
実行結果は以下の通りです。
+-------------+ | DaysInMonth | +-------------+ | 31 | | 31 | | 30 | | 31 | | 30 | | 31 | +-------------+ 6 rows in set (0.00 sec)
解説
結果を見ると、2019年1月は31日、2018年11月は30日など、それぞれの月に応じた正しい日数が返されていることがわかります。この方法はうるう年の2月(29日)にも自動的に対応するため、日付計算や月次集計処理などで非常に便利です。なお、MySQL 8.0以降では同様の目的でDAYOFMONTH()関数も使用できますが、LAST_DAY()との組み合わせが最もシンプルで一般的な手法です。
-
MySQLで月を指定してデータを抽出する方法(MONTH()関数の使い方)
MySQLで日付データから特定の「月」に該当するレコードだけを抽出したい場合は、MONTH()関数を使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、月を条件にしたSELECT文の書き方を具体的に解説します。1. サンプルテーブルの作成まずは、出荷日(Shippingdate)を格納するdatetime型のカラムを持つテーブルを作成します。mysql> create table DemoTable1599 -> ( -> Shippingdate d
-
Javaで特定の年・月の日数を取得する方法!GregorianCalendarのgetActualMaximum()メソッド解説
GregorianCalendarクラスとはGregorianCalendarは、Calendarクラスの具象サブクラスであり、世界で最も広く使用されている標準的な暦体系(グレゴリオ暦)を提供します。Javaでは、このGregorianCalendarを使うことで、グレゴリオ暦だけでなくユリウス暦も扱うことができます。特定の年におけるある月の日数を調べたい場合は、GregorianCalendarクラスが提供するgetActualMaximum()メソッドを利用します。このメソッドは、指定されたカレンダーフィールドが取り得る最大値を返します。引数には、Calendarクラスの任意のフィールドを