MySQL 速習チュートリアル

MySQL 日付操作の基本

1. MySQL の日付操作について

データベースで日付を扱う際に最も難しいのは、挿入や抽出(セレクト)を行おうとしている日付のフォーマット(形式)が、データベース内の日付カラムのフォーマットと完全に一致しているかを確認することです。

2. MySQL の日付データ型

MySQL には、データベースに日付や日時(日付+時刻)の値を保存するための以下のデータ型が用意されています。

  • DATE - フォーマット: YYYY-MM-DD
  • DATETIME - フォーマット: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP - フォーマット: YYYY-MM-DD HH:MI:SS
  • TIME - フォーマット: HH:MI:SS
  • YEAR - フォーマット: YYYY または YY
注意: 日付データ型は、データベース内に新しいテーブルを作成する際にカラムに対して定義されます。

3. 日付操作の実践例

次の "Orders"(注文)テーブルを見てみましょう。

OrderIdProductNameOrderDate
1Geitost2025-11-11
2Camembert Pierrot2025-11-09
3Mozzarella di Giovanni2025-11-11
4Mascarpone Fabioli2025-10-29

このテーブルから、"OrderDate" が "2025-11-11" であるレコードを選択したい場合、以下の SELECT ステートメントを使用します。

実行例

/* 日付が 2025-11-11 の注文をすべて取得 */
SELECT * FROM Orders WHERE OrderDate='2025-11-11';

結果セットは以下のようになります。

OrderIdProductNameOrderDate
1Geitost2025-11-11
3Mozzarella di Giovanni2025-11-11
注意: 時刻の要素(タイムコンポーネント)が含まれていない場合、2つの日付の比較は非常に簡単に行えます。

4. 時刻コンポーネントが含まれる場合の注意点

ここで、"Orders" テーブルが次のようなデータを持っていると仮定してください("OrderDate" カラムに時刻情報が追加されている点に注目してください)。

OrderIdProductNameOrderDate
1Geitost2025-11-11 13:23:44
2Camembert Pierrot2025-11-09 15:45:21
3Mozzarella di Giovanni2025-11-11 11:12:01
4Mascarpone Fabioli2025-10-29 14:56:59

この状態で、先ほどと同じ SELECT ステートメントを実行したとします。

実行例

SELECT * FROM Orders WHERE OrderDate='2025-11-11';

この場合、結果は1件も取得されません!
これは、クエリが「時刻部分を持たない(または時刻が 00:00:00 である)」日付のみを探しているため、時刻が含まれているデータとは一致しなくなるからです。

Tips: クエリをシンプルに保ちメンテナンス性を高めるために、どうしても必要な場合を除き、日付データに時刻コンポーネントを使用しないことをお勧めします。