MySQLで現在の日時より前のタイムスタンプを抽出する方法
MySQLでは、NOW()関数と比較演算子を組み合わせることで、現在の日時より前のタイムスタンプを持つレコードを簡単に抽出できます。この記事では、テーブルの作成からデータの挿入、そして条件付きのSELECT文による抽出まで、具体的な手順を解説します。
1. テーブルを作成する
まず、TIMESTAMP型のカラムを持つテーブルを作成します。
mysql> create table DemoTable(
ArrivalDate timestamp
);
Query OK, 0 rows affected (1.96 sec)
ここでは「ArrivalDate」という名前のTIMESTAMP型カラムを1つだけ持つシンプルなテーブル「DemoTable」を作成しました。
2. テーブルにレコードを挿入する
次に、INSERTコマンドを使用してテーブルに複数のレコードを追加します。
mysql> insert into DemoTable values('2019-09-14 17:25:00');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('2019-09-13 17:25:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('2016-09-01 17:20:10');
Query OK, 1 row affected (0.38 sec)
mysql> insert into DemoTable values('2019-09-11 12:00:00');
Query OK, 1 row affected (0.16 sec)3. 登録された全レコードを確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+---------------------+
| ArrivalDate |
+---------------------+
| 2019-09-14 17:25:00 |
| 2019-09-13 17:25:00 |
| 2016-09-01 17:20:10 |
| 2019-09-11 12:00:00 |
+---------------------+
4 rows in set (0.04 sec)
合計4件のレコードが登録されていることが確認できます。
4. 現在の日時より前のタイムスタンプを抽出する
本題となる、現在の日時より前のタイムスタンプを持つレコードを表示するクエリは以下の通りです。
mysql> select *from DemoTable where ArrivalDate < now();
実行すると、次のような結果が得られます。
+---------------------+
| ArrivalDate |
+---------------------+
| 2019-09-13 17:25:00 |
| 2016-09-01 17:20:10 |
| 2019-09-11 12:00:00 |
+---------------------+
3 rows in set (0.07 sec)
解説
ポイントはWHERE句でArrivalDate < now()という条件を指定している点です。NOW()はMySQLの組み込み関数で、クエリ実行時点の現在日時を返します。この比較により、現在日時よりも過去のタイムスタンプを持つレコードのみが抽出されます。
上記の例では、最も新しい「2019-09-14 17:25:00」が現在日時より後のため除外され、残りの3件が表示されています。
応用テクニック
用途に応じて、以下のようなバリエーションも活用できます。
- 現在以降のデータを抽出したい場合:
where ArrivalDate > now() - 特定の日時と比較したい場合:
where ArrivalDate < '2019-09-13 00:00:00' - 今日の0時以前を抽出したい場合:
where ArrivalDate < curdate()
このように、NOW()やCURDATE()などの日付関数と比較演算子を組み合わせることで、柔軟な日時条件でのデータ抽出が可能になります。ログの整理や期限切れデータの管理など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLのDATE_FORMAT関数でタイムスタンプから月番号を取得する方法
MySQLでタイムスタンプ型のカラムから「月の番号だけ」を取り出したい場合、DATE_FORMAT() 関数を使うのが便利です。書式指定子 %m を指定することで、01〜12の形式で月番号を文字列として取得できます。この記事では、実際にテーブルを作成し、データを登録して、月番号を抽出するまでの一連の手順をサンプルコード付きで解説します。1. サンプルテーブルの作成まず、TIMESTAMP型のカラムを持つテーブルを作成します。mysql> create table DemoTable1999 ( ArrivalDate timestamp ); Query OK,
-
【MySQL】DATE_FORMAT()でタイムスタンプから月名のみを取得する方法
MySQLでTIMESTAMPから月名のみを取得する方法 MySQLで日時データ(TIMESTAMP)から「月名」だけを取り出したい場合は、DATE_FORMAT()関数を使用します。フォーマット指定子に%Mを指定することで、「January」「December」のような完全な英語の月名を簡単に取得できます。 1. サンプルテーブルを作成する まず、TIMESTAMP型のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1999 ( ArrivalDate timestamp ); Query OK, 0 rows affected