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

MySQLでタイムスタンプ値を使って今日と昨日の2日分のデータを取得する方法

はじめに

この記事では、bigint型として保存されたUNIXタイムスタンプ値を持つMySQLテーブルから、「今日」と「昨日」の2日分のデータを抽出する方法を解説します。unix_timestamp()関数とcurdate()関数、そしてINTERVAL句を組み合わせることで、日付計算を簡単に行うことができます。

1. サンプルテーブルの作成

まず、出荷日をタイムスタンプ値で格納するテーブルを作成します。

mysql> create table DemoTable1495
    -> (
    -> ShippingDate bigint
    -> );
Query OK, 0 rows affected (0.63 sec)

2. テストデータの挿入

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

mysql> insert into DemoTable1495 values(1570127400);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1495 values(1570213800);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1495 values(1570645800);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1495 values(1570300200);
Query OK, 1 row affected (0.15 sec)

3. 登録済みデータの確認

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

mysql> select * from DemoTable1495;

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

+--------------+
| ShippingDate |
+--------------+
|   1570127400 |
|   1570213800 |
|   1570645800 |
|   1570300200 |
+--------------+
4 rows in set (0.00 sec)

4. 現在の日付を確認

基準となる現在の日付を確認しておきます。

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-10-06 |
+------------+
1 row in set (0.00 sec)

5. 今日と昨日の2日分のデータを取得するクエリ

ここが本題となるクエリです。curdate()からINTERVAL 1 DAYを引くことで「昨日の0時」のタイムスタンプを、逆に1日加えることで「明日の0時」のタイムスタンプを算出し、その範囲に含まれるレコードだけを抽出しています。

mysql> select * from DemoTable1495
    -> where ShippingDate >=unix_timestamp(curdate() - interval 1 day)
    -> and
    -> ShippingDate < unix_timestamp(curdate() + interval 1 day);

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

+--------------+
| ShippingDate |
+--------------+
|   1570213800 |
|   1570300200 |
+--------------+
2 rows in set (0.00 sec)

クエリのポイント

  • unix_timestamp(): 日付・日時の値をUNIXタイムスタンプ(秒)に変換します。bigint型のカラムと比較するために必須です。
  • curdate() - INTERVAL 1 DAY: 昨日の日付(0時0分)を表します。これにより「>=」条件で昨日以降のデータが対象になります。
  • curdate() + INTERVAL 1 DAY: 明日の日付(0時0分)を表します。「<」条件と組み合わせることで、今日の23時59分59秒までのデータまで確実に含まれます。

まとめ

タイムスタンプ値がbigint型で保存されている場合でも、unix_timestamp()curdate()INTERVAL句を組み合わせれば、今日と昨日のような相対的な期間のデータをシンプルなWHERE句で効率よく取得できます。上限側を「< 明日の0時」とすることで、境界値の抜け漏れも防げるのがポイントです。

  1. MySQLで現在日付から過去2日間のレコードを取得する方法

    MySQLにおいて、現在の日付を基準に過去2日間のレコードを抽出したい場合、DATE_SUB()関数を使用します。さらに、NOW()関数を組み合わせることで、現在の日付・時刻を動的に取得できます。基本構文過去2日間のレコードを取得するための基本的なSQL構文は以下の通りです。SELECT * FROM yourTableNameWHERE yourDateTimeColumnName BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 2 DAY)AND DATE_SUB(DATE(NOW()), INTERVAL 1 DAY);実例で確認しようここからは、実際にテー

  2. JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法

    MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI