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

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));

このように書くことで、時刻情報が入ったデータでも当日・前日のレコードを正しく抽出できます。用途に応じて使い分けてください。

  1. MySQLのフィールドに現在の日付を設定する方法(UNIX_TIMESTAMP(now)の使い方)

    MySQLでは、unix_timestamp()関数を使うことで、現在の日時をUNIXタイムスタンプとして取得し、テーブルのフィールドに簡単に設定できます。この記事では、実際にテーブルを作成し、現在の日付(UNIXタイムスタンプ)をフィールドに設定する手順を解説します。UNIXタイムスタンプとはUNIXタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を表す数値です。日時を整数として扱えるため、比較や計算が容易になり、データベースでの時間管理によく利用されます。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql>

  2. MySQLのWHERE句で期日と現在日付のレコードをチェックする条件の書き方

    期日(duedate)と現在の日付を比較してレコードの妥当性をチェックしたい場合、MySQLでは IF() 関数 を使うと便利です。NULL値や過去の日付が含まれるデータを自動的に判定し、「Wrong Date」などのラベルを表示させることができます。まずは、動作を確認するためのテーブルを作成しましょう。テーブル作成例mysql> create table demo89 -> ( -> duedate date -> ); Query OK, 0 rows affected (0.78 sec)次に、INSERTコマンドを使ってテーブルにいくつか