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関数で比較する方法もあります。ただし、この書き方はインデックスを利用できなくなる場合があるため、大量データを扱う際は範囲検索(>= と < の組み合わせ)を推奨します。
-
【PHP】MySQLのDATETIME型から日付だけを抽出して変数に代入する方法
MySQLのDATETIME型フィールド(例:2018-02-13 13:10:15)から「日付だけ」を取り出したい場合、PHPではDateTimeクラスを使うのが最もシンプルで確実な方法です。SQL側でDATE_FORMAT()を使う方法もありますが、PHP側で柔軟にフォーマットを制御できるDateTimeクラスの利用がおすすめです。DateTime::createFromFormat() の基本構文DateTimeクラスの静的メソッド createFromFormat() を使うと、指定した形式の日時文字列からDateTimeオブジェクトを生成できます。その後、format() メソッドで
-
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