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

MySQLのDATETIMEフィールドからDATE関数を使って今日のレコードを取得する方法

MySQLでは、DATETIME型のカラムから「今日の日付」に該当するレコードだけを抽出したいケースがよくあります。本記事では、CURDATE()DATE_SUB()を組み合わせたクエリを使って、DATETIMEフィールドから当日のレコードを取得する方法を、実際のサンプルコードとともにわかりやすく解説します。

1. サンプルテーブルを作成する

まず、DATETIME型のカラムを含むテーブルを作成します。

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ShippingDate datetime
);
Query OK, 0 rows affected (0.54 sec)

この例では、主キーとなるIdカラムと、出荷日時を格納するShippingDate(datetime型)カラムを持つテーブルDemoTableを作成しています。

2. テストデータを挿入する

次に、INSERT文を使っていくつかのレコードを登録します。

mysql> insert into DemoTable(ShippingDate) values('2019-03-01 05:45:32');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-04-13 11:34:56');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-03-15 04:45:23');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-04-11 12:10:02');
Query OK, 1 row affected (0.17 sec)

3. 登録したレコードを確認する

SELECT文ですべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行結果は以下のとおりです。

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
| 1  | 2019-03-01 05:45:32 |
| 2  | 2019-04-13 11:34:56 |
| 3  | 2019-03-15 04:45:23 |
| 4  | 2019-04-11 12:10:02 |
+----+---------------------+
4 rows in set (0.00 sec)

4. 今日のレコードを抽出するクエリ

ここからが本題です。DATETIMEフィールドから今日のレコードを取得するには、以下のようなクエリを使用します。ここでは、今日の日付が「2019-04-13」であると仮定します。

mysql> select *from DemoTable where ShippingDate > date_sub(curdate(),interval 1 day);

実行結果は以下のとおりです。

+----+---------------------+
| Id | ShippingDate        |
+----+---------------------+
| 2  | 2019-04-13 11:34:56 |
+----+---------------------+
1 row in set (0.00 sec)

クエリの仕組みを解説

このクエリがどのように動作しているのか、ポイントを整理します。

  • CURDATE():現在の日付(時刻を含まない)を返す関数です。この例では「2019-04-13」を返します。
  • DATE_SUB(日付, INTERVAL 1 DAY):指定した日付から1日を引いた値を返します。つまり「2019-04-12」になります。
  • WHERE句の条件ShippingDate > '2019-04-12'という条件になるため、2019年4月13日以降の時刻を持つレコードのみが抽出されます。

この方法なら、DATETIME型の時刻部分(時・分・秒)も考慮しながら、柔軟に「直近24時間以内」や「今日以降」のレコードを取得できます。なお、厳密に「今日の0時0分0秒以降」のレコードだけを取得したい場合は、WHERE DATE(ShippingDate) = CURDATE()のようにDATE関数で比較する方法もあります。ただし、この書き方はインデックスを利用できなくなる場合があるため、大量データを扱う際は範囲検索(>= と < の組み合わせ)を推奨します。

  1. 【PHP】MySQLのDATETIME型から日付だけを抽出して変数に代入する方法

    MySQLのDATETIME型フィールド(例:2018-02-13 13:10:15)から「日付だけ」を取り出したい場合、PHPではDateTimeクラスを使うのが最もシンプルで確実な方法です。SQL側でDATE_FORMAT()を使う方法もありますが、PHP側で柔軟にフォーマットを制御できるDateTimeクラスの利用がおすすめです。DateTime::createFromFormat() の基本構文DateTimeクラスの静的メソッド createFromFormat() を使うと、指定した形式の日時文字列からDateTimeオブジェクトを生成できます。その後、format() メソッドで

  2. Pythonで文字列から日付を抽出・解析する方法

    文字列から日付を抽出するには、まずその文字列内で日付がどのような形式(フォーマット)で表現されているかを把握しておく必要があります。基本的なアプローチとしては、正規表現(reモジュール)で日付部分を取り出し、datetime.datetime.strptime() で解析(パース)するという流れになります。例えば、文字列中に「YYYY-MM-DD」形式の日付が含まれている場合、以下のコードで抽出と解析ができます。コード例import re import datetime s = I have a meeting on 2018-12-10 in New York match = re.sea