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時」とすることで、境界値の抜け漏れも防げるのがポイントです。
-
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);実例で確認しようここからは、実際にテー
-
JavaでMySQLデータベースのテーブルから最後のレコードを取得する方法
MySQLデータベースからデータを取得するには、JavaのexecuteQuery()メソッドを使用します。本記事では、テーブルに登録された最後のレコード(最新の1件)をJavaプログラムで取得する手順を、サンプルコード付きでわかりやすく解説します。1. MySQLデータベースにテーブルを作成するまず、MySQLデータベース上にテーブルを用意します。ここでは「sample」データベースに、以下のようなテーブルを作成します。mysql> create table javaGetDataDemo -> ( -> Id int NOT NULL AUTO_INCREMENT PRI