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

MySQLで当日の00:00から現在時刻までのレコードを抽出するクエリの書き方

はじめに

MySQLで「今日の日付の午前0時(00:00)から現在時刻まで」のレコードを取得したいケースはよくあります。例えば、現在の日時が 2019-09-14 08:50:10 である場合、2019-09-14 00:00:00 から 2019-09-14 08:50:10 までの範囲にあるレコードを抽出することになります。

本記事では、実際にテーブルを作成し、データを挿入しながら、この条件を実現するクエリを具体的に解説します。

サンプルテーブルの作成

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

mysql> create table DemoTable
(
    DueDate datetime
);
Query OK, 0 rows affected (0.66 sec)

テストデータの挿入

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

mysql> insert into DemoTable values('2019-09-14');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-09-14 08:00:10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-14 08:44:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-14 12:10:00');
Query OK, 1 row affected (0.12 sec)

登録データの確認

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

mysql> select *from DemoTable;

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

+---------------------+
| DueDate |
+---------------------+
| 2019-09-14 00:00:00 |
| 2019-09-14 08:00:10 |
| 2019-09-14 08:44:00 |
| 2019-09-14 12:10:00 |
+---------------------+
4 rows in set (0.00 sec)

当日の00:00から現在時刻までを抽出するクエリ

ここからが本題です。「本日の午前0時以降、かつ現在時刻より前」という条件で絞り込むには、DATE(NOW())NOW() を組み合わせて次のように記述します。

mysql> select *from DemoTable where DueDate > DATE(NOW()) and DueDate < NOW();

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

+---------------------+
| DueDate |
+---------------------+
| 2019-09-14 08:00:10 |
| 2019-09-14 08:44:00 |
+---------------------+
2 rows in set (0.00 sec)

クエリのポイント解説

  • DATE(NOW()): 現在日付の時刻部分を切り捨て、「本日の00:00:00」を返します。
  • NOW(): 現在の日時(年月日と時分秒)を返します。
  • この2つをAND条件で組み合わせることで、「本日の開始時刻から現在時刻まで」の範囲に含まれるレコードだけを正確に抽出できます。

なお、境界値の扱いに注意が必要です。上記の例では比較演算子に >< を使用しているため、ちょうど00:00:00や現在時刻そのもののレコードは除外されます。これらを含めたい場合は、>=<= を使うようにしてください。

まとめ

MySQLで当日の00:00から現在時刻までのデータを取得するには、DueDate > DATE(NOW()) AND DueDate < NOW() という条件式を使うのがシンプルで効果的です。日別の集計やリアルタイムダッシュボードなど、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. 複数のSELECTステートメントの結果を1つのクエリで取得する方法(MySQLのUNION ALL活用術)

    MySQLで複数のSELECTステートメントの結果を1つの結果セットとしてまとめて取得したい場合は、UNION ALLを使用します。UNION ALLは、各SELECT文の結果を重複を排除せずにそのまま連結してくれるため、数値の列挙やログデータの統合など、さまざまな場面で活躍します。UNION ALLの基本構文以下がUNION ALLを使った基本的な構文です。select yourValue1 AS anyColumnName UNION ALL select yourValue2 AS yourColumnName . . . . Nポイントは、すべてのSELECTステートメントで同じ数・互

  2. MySQLで日付を選択してテキスト形式にフォーマットする方法

    MySQLから日付データを選択し、任意のテキスト形式に整形するには、DATE_FORMAT()関数を使用します。まずは基本となる構文を見ていきましょう。基本構文select date_format(カラム名, %e %b %y) from テーブル名;それでは、実際にサンプルテーブルを作成しながら動作を確認していきます。サンプルテーブルの作成mysql> create table DemoTable -> ( -> DueDate date -> ); Query OK, 0 rows affected (0.52 sec)レコードの挿入inse