MySQLで今月の最初の日(月初)を取得する方法
MySQLでは、日付関数を組み合わせることで、今月の最初の日(月初の日付)を簡単に取得できます。ここでは、代表的な方法を具体例とともに紹介します。
DATE_SUBとLAST_DAYを組み合わせる方法
LAST_DAY() 関数で今月の最終日を取得し、そこから「その日の日付の数値 − 1」分だけ遡ることで、月初の日付を求めることができます。
mysql> SELECT DATE_SUB(LAST_DAY(NOW()), INTERVAL DAY(LAST_DAY(NOW())) - 1 DAY) AS 'FIRST DAY OF CURRENT MONTH'; +----------------------------+ | FIRST DAY OF CURRENT MONTH | +----------------------------+ | 2017-10-01 | +----------------------------+ 1 row in set (0.00 sec)
この方法のポイントは以下の通りです。
LAST_DAY(NOW()):現在の日付が属する月の最終日を返すDAY(LAST_DAY(NOW())):その最終日の「日」の部分(例:31日なら31)を数値として取り出すINTERVAL ... - 1 DAY:最終日から「日数 − 1」だけ遡ることで、必ず1日になる
もっとシンプルな方法:DATE_FORMATを使う
実は、DATE_FORMAT() を使えば、より簡潔に月初の日付を取得できます。
mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-01') AS 'FIRST DAY OF CURRENT MONTH'; +----------------------------+ | FIRST DAY OF CURRENT MONTH | +----------------------------+ | 2017-10-01 | +----------------------------+ 1 row in set (0.00 sec)
'%Y-%m-01' というフォーマット指定により、「年」と「月」には現在の値が使われ、「日」は常に「01」に固定されます。ただし、この方法の戻り値は文字列である点に注意してください。
どちらの方法を選ぶべきか?
- DATE_SUB + LAST_DAY の方法:結果が日付型(DATE)のまま返されるため、他の日付計算や比較処理にそのまま使える
- DATE_FORMAT の方法:記述がシンプルで読みやすいが、戻り値は文字列になるため、日付型が必要な場面では
CAST()やSTR_TO_DATE()での変換が必要
用途に応じて使い分けるのがおすすめです。日付型として扱いたい場合は前者、表示用の文字列で十分な場合は後者が便利です。
-
MySQLで日付データから月の初日と末日を取得する方法
MySQLでは、日付型のカラムから「その月の最初の日」と「最後の日」を簡単に求めることができます。この記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、日付を格納するためのテーブルを作成します。mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.73 sec)2. レコードの挿入次に、INSERT文を使ってテーブルにいくつかのレコードを挿入します。mysql>
-
MySQLで今月のレコードを合計する方法【SUM()とMONTH()関数の使い方】
MySQLで今月のレコードを合計する方法MySQLで今月のレコードを合計するには、SUM()関数とMONTH()関数を組み合わせて使用します。ここでは、サンプルテーブルを作成し、実際にデータを集計する手順を順番に解説します。1. テーブルを作成するまず、日付と金額を格納するテーブルを作成しましょう。mysql> create table DemoTable1889 ( DueDate date, Amount int