MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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における推奨される設計手法です。

  1. MySQLで当月・当年の初めからのバウチャー値の合計を集計する方法

    MySQLで「今月の初めから」や「今年の初めから」の期間に含まれるデータを対象に、バウチャー値(VoucherValue)の合計を求めたい場合には、MONTH() 関数と YEAR() 関数を組み合わせて使うのが便利です。この記事では、実際にテーブルを作成し、サンプルデータを挿入しながら、具体的なSQLクエリの書き方を順番に解説していきます。 1. サンプルテーブルの作成 まずは、バウチャー値とチャージ日付を格納するテーブルを作成しましょう。 mysql> create table DemoTable1562     -> (  

  2. MySQLで特定の月と年に基づいてレコードを取得する方法

    MySQLで特定の月と年に基づいてレコードを取得する方法日付データから特定の月と年に該当するレコードだけを抽出したい場合、MySQLの MONTH() 関数と YEAR() 関数を組み合わせて使用します。ここでは、実際にテーブルを作成し、データを挿入して、条件に合うレコードを取得するまでの手順を具体的に解説します。1. サンプルテーブルの作成まず、日付型(DATE)のカラムを持つテーブルを作成します。mysql> create table DemoTable1846     (     PurchaseDat