MySQLで月と年だけを保存するには?DATETIME型とMONTH()・YEAR()関数の活用方法
MySQLで月と年のみを扱うための基本アプローチ
MySQLでは、月と年だけを個別に保存する専用のデータ型は存在しません。そのため、日付データはDATETIME型として完全な形で保存し、必要に応じてMONTH()関数とYEAR()関数を使って月や年を抽出するのがベストプラクティスです。
この方法なら、後から柔軟にデータを活用でき、並べ替えや範囲検索も正確に行えます。
月と年を抽出する基本構文
DATETIME型のカラムから月と年を抽出する構文は以下の通りです。
SELECT MONTH(yourDateTimeColumnName) AS anyVariableName1,
YEAR(yourDateTimeColumnName) AS anyVariableName2
FROM yourTableName;
実際にテーブルを作成して確認してみよう
それでは、実際にテーブルを作成して動作を確認してみましょう。まずはDATETIME型のカラムを持つテーブルを作成します。
mysql> CREATE TABLE OnlyMonthandYear
-> (
-> DueDateTime DATETIME
-> );
Query OK, 0 rows affected (0.56 sec)
レコードの挿入
次に、INSERT文を使って日付データを挿入します。
mysql> INSERT INTO OnlyMonthandYear VALUES('2016-12-10');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO OnlyMonthandYear VALUES('2017-10-21');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO OnlyMonthandYear VALUES('2018-03-25');
Query OK, 1 row affected (0.31 sec)
mysql> INSERT INTO OnlyMonthandYear VALUES('2018-12-18');
Query OK, 1 row affected (0.20 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> SELECT * FROM OnlyMonthandYear;
+---------------------+
| DueDateTime |
+---------------------+
| 2016-12-10 00:00:00 |
| 2017-10-21 00:00:00 |
| 2018-03-25 00:00:00 |
| 2018-12-18 00:00:00 |
+---------------------+
4 rows in set (0.00 sec)
DATETIME型から月と年だけを抽出するクエリ
ここからが本題です。DATETIME型のカラムから月と年だけを取り出すクエリを実行します。
mysql> SELECT MONTH(DueDateTime) AS OnlyMonth,
YEAR(DueDateTime) AS OnlyYear
FROM OnlyMonthandYear;
実行結果
+-----------+----------+
| OnlyMonth | OnlyYear |
+-----------+----------+
| 12 | 2016 |
| 10 | 2017 |
| 3 | 2018 |
| 12 | 2018 |
+-----------+----------+
4 rows in set (0.02 sec)
まとめ:なぜDATETIME型で保存すべきなのか
このように、DATETIME型で日付を保存しておけば、MONTH()関数とYEAR()関数を使っていつでも月や年を自由に取り出せます。逆に、月と年だけを文字列として保存してしまうと、日付としての比較や計算ができなくなり、検索性能や保守性も低下します。
「月と年だけが必要」というケースでも、まずは完全な日付として保存し、表示や集計の段階で必要な部分だけを抽出する——これがMySQLにおける推奨される設計手法です。
-
MySQLで当月・当年の初めからのバウチャー値の合計を集計する方法
MySQLで「今月の初めから」や「今年の初めから」の期間に含まれるデータを対象に、バウチャー値(VoucherValue)の合計を求めたい場合には、MONTH() 関数と YEAR() 関数を組み合わせて使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、具体的なSQLクエリの書き方を順番に解説していきます。 1. サンプルテーブルの作成 まずは、バウチャー値とチャージ日付を格納するテーブルを作成しましょう。 mysql> create table DemoTable1562 -> (
-
MySQLで特定の月と年に基づいてレコードを取得する方法
MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846 ( PurchaseDat