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"(注文)テーブルを見てみましょう。
| OrderId | ProductName | OrderDate |
|---|---|---|
| 1 | Geitost | 2025-11-11 |
| 2 | Camembert Pierrot | 2025-11-09 |
| 3 | Mozzarella di Giovanni | 2025-11-11 |
| 4 | Mascarpone Fabioli | 2025-10-29 |
このテーブルから、"OrderDate" が "2025-11-11" であるレコードを選択したい場合、以下の SELECT ステートメントを使用します。
実行例
/* 日付が 2025-11-11 の注文をすべて取得 */
SELECT * FROM Orders WHERE OrderDate='2025-11-11';結果セットは以下のようになります。
| OrderId | ProductName | OrderDate |
|---|---|---|
| 1 | Geitost | 2025-11-11 |
| 3 | Mozzarella di Giovanni | 2025-11-11 |
注意: 時刻の要素(タイムコンポーネント)が含まれていない場合、2つの日付の比較は非常に簡単に行えます。
4. 時刻コンポーネントが含まれる場合の注意点
ここで、"Orders" テーブルが次のようなデータを持っていると仮定してください("OrderDate" カラムに時刻情報が追加されている点に注目してください)。
| OrderId | ProductName | OrderDate |
|---|---|---|
| 1 | Geitost | 2025-11-11 13:23:44 |
| 2 | Camembert Pierrot | 2025-11-09 15:45:21 |
| 3 | Mozzarella di Giovanni | 2025-11-11 11:12:01 |
| 4 | Mascarpone Fabioli | 2025-10-29 14:56:59 |
この状態で、先ほどと同じ SELECT ステートメントを実行したとします。
実行例
SELECT * FROM Orders WHERE OrderDate='2025-11-11';この場合、結果は1件も取得されません!
これは、クエリが「時刻部分を持たない(または時刻が 00:00:00 である)」日付のみを探しているため、時刻が含まれているデータとは一致しなくなるからです。
Tips: クエリをシンプルに保ちメンテナンス性を高めるために、どうしても必要な場合を除き、日付データに時刻コンポーネントを使用しないことをお勧めします。