MySQLで現在の日付と前日(昨日)の日付を取得する方法
MySQLでは、CURDATE()関数を使えば現在の日付を取得でき、DATE_SUB()関数にINTERVAL 1 DAYを組み合わせることで、その前日(昨日)の日付も簡単に取得できます。この記事では、基本的な構文から実際のテーブルを使った実行例まで、わかりやすく解説します。
現在の日付と前日の日付を取得する基本構文
まず、前日の日付だけを単独で取得したい場合は、以下のように記述します。
SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY);
続いて、テーブルから「現在の日付」または「前日の日付」に一致するレコードを取得する場合の構文は次のとおりです。
SELECT * FROM テーブル名 WHERE カラム名 = CURDATE() OR カラム名 = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
サンプルテーブルを作って動きを確認しよう
構文の理解を深めるため、実際にサンプルテーブルを作成して確認してみましょう。まずはテーブル作成用のクエリです。
mysql> create table ProductDemo
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> ProductName varchar(20),
-> ProductOfferDate datetime,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.54 sec)テストデータの挿入
次に、INSERT文を使って商品名と商品提供日(ProductOfferDate)のデータを登録します。
mysql> insert into ProductDemo(ProductName,ProductOfferDate) values('Product-11','2017-05-21');
Query OK, 1 row affected (0.25 sec)
mysql> insert into ProductDemo(ProductName,ProductOfferDate) values('Product-22','2019-01-15');
Query OK, 1 row affected (0.16 sec)
mysql> insert into ProductDemo(ProductName,ProductOfferDate) values('Product-21','2019-01-14');
Query OK, 1 row affected (0.14 sec)
mysql> insert into ProductDemo(ProductName,ProductOfferDate) values('Product-91','2018-10-23');
Query OK, 1 row affected (0.26 sec)
mysql> insert into ProductDemo(ProductName,ProductOfferDate) values('Product-133','2019-01-24');
Query OK, 1 row affected (0.13 sec)登録済みレコードの一覧表示
SELECT文ですべてのレコードを表示して、正しく登録されているか確認します。
mysql> select *from ProductDemo;
実行結果は以下のとおりです。
+----+-------------+---------------------+ | Id | ProductName | ProductOfferDate | +----+-------------+---------------------+ | 1 | Product-11 | 2017-05-21 00:00:00 | | 2 | Product-22 | 2019-01-15 00:00:00 | | 3 | Product-21 | 2019-01-14 00:00:00 | | 4 | Product-91 | 2018-10-23 00:00:00 | | 5 | Product-133 | 2019-01-24 00:00:00 | +----+-------------+---------------------+ 5 rows in set (0.00 sec)
現在の日付と前日に一致するレコードを取得する
ここで、商品提供日が「当日」または「前日」と一致する商品を取得してみましょう。実行するクエリは以下のとおりです。
mysql> select *from ProductDemo
-> where ProductOfferDate = CURDATE()
-> OR ProductOfferDate = date_sub(curdate(), interval 1 day);この例では「2019-01-15」がCURDATE()に、「2019-01-14」が前日の日付に該当するため、実行結果は次のようになります。
+----+-------------+---------------------+ | Id | ProductName | ProductOfferDate | +----+-------------+---------------------+ | 2 | Product-22 | 2019-01-15 00:00:00 | | 3 | Product-21 | 2019-01-14 00:00:00 | +----+-------------+---------------------+ 2 rows in set (0.00 sec)
補足:DATETIME型カラムを比較するときの注意点
今回の例では時刻部分が「00:00:00」になっているため、等号(=)での比較が成立しています。しかし、DATETIME型のカラムに時刻情報が含まれる場合は、= CURDATE()では一致しないことがあります。そのような場合は、DATE()関数を使って日付部分だけで比較するか、範囲指定を行うのが確実です。
SELECT * FROM ProductDemo WHERE DATE(ProductOfferDate) IN (CURDATE(), DATE_SUB(CURDATE(), INTERVAL 1 DAY));
このように書くことで、時刻情報が入ったデータでも当日・前日のレコードを正しく抽出できます。用途に応じて使い分けてください。
-
MySQLのフィールドに現在の日付を設定する方法(UNIX_TIMESTAMP(now)の使い方)
MySQLでは、unix_timestamp()関数を使うことで、現在の日時をUNIXタイムスタンプとして取得し、テーブルのフィールドに簡単に設定できます。この記事では、実際にテーブルを作成し、現在の日付(UNIXタイムスタンプ)をフィールドに設定する手順を解説します。UNIXタイムスタンプとはUNIXタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を表す数値です。日時を整数として扱えるため、比較や計算が容易になり、データベースでの時間管理によく利用されます。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql>
-
MySQLのWHERE句で期日と現在日付のレコードをチェックする条件の書き方
期日(duedate)と現在の日付を比較してレコードの妥当性をチェックしたい場合、MySQLでは IF() 関数 を使うと便利です。NULL値や過去の日付が含まれるデータを自動的に判定し、「Wrong Date」などのラベルを表示させることができます。まずは、動作を確認するためのテーブルを作成しましょう。テーブル作成例mysql> create table demo89 -> ( -> duedate date -> ); Query OK, 0 rows affected (0.78 sec)次に、INSERTコマンドを使ってテーブルにいくつか