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

【MySQL】STR_TO_DATEを使ってAdmissionDateが現在の日付より前のレコードを比較・抽出する方法

はじめに

MySQLでは、文字列として保存された日付データと現在の日付を比較したいケースがあります。本記事では、STR_TO_DATE()関数を使って文字列形式の日付を日付型に変換し、CURDATE()で取得した現在の日付と比較する方法を、具体的なサンプルコードとともに解説します。

テーブルの作成

まず、サンプル用のテーブルを作成します。ここでは、AdmissionDate列をvarchar(50)型として定義しています。

mysql> create table DemoTable
(
    AdmissionDate varchar(50)
);
Query OK, 0 rows affected (0.63 sec)

注意 − 現在の日付は2019年9月14日と仮定して説明を進めます。

レコードの挿入

INSERTコマンドを使用して、いくつかのレコードをテーブルに挿入します。以下がそのクエリです。

mysql> insert into DemoTable values('15-Sep-2019');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('14-Sep-2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('13-Sep-2016');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('13-Sep-2019');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('13-Sep-2020');
Query OK, 1 row affected (0.10 sec)

登録済みレコードの確認

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

mysql> select *from DemoTable;

以下のような出力結果になります。

+---------------+
| AdmissionDate |
+---------------+
| 15-Sep-2019   |
| 14-Sep-2019   |
| 13-Sep-2016   |
| 13-Sep-2019   |
| 13-Sep-2020   |
+---------------+
5 rows in set (0.00 sec)

現在の日付より前の日付を比較するクエリ

AdmissionDateが現在の日付よりも小さい(=過去の日付である)レコードを抽出するには、次のようにクエリを記述します。

mysql> select *from DemoTable where str_to_date(AdmissionDate,'%d-%b-%Y') < CURDATE();

このクエリを実行すると、以下の出力が得られます。

+---------------+
| AdmissionDate |
+---------------+
| 13-Sep-2016   |
| 13-Sep-2019   |
+---------------+
2 rows in set (0.00 sec)

クエリのポイント解説

STR_TO_DATE()関数 − 第1引数に文字列の日付、第2引数にそのフォーマットを指定します。ここでは「%d-%b-%Y」を指定することで、「13-Sep-2019」のような形式(日−月名−年)を正しく日付型へ変換できます。

CURDATE()関数 − 現在の日付を「YYYY-MM-DD」形式で返します。STR_TO_DATE()で変換した日付と直接比較できるため、文字列同士の誤った比較(辞書順比較などによるバグ)を防ぐことができます。

結果として、現在の日付(2019年9月14日)より前の「13-Sep-2016」と「13-Sep-2019」だけが抽出されました。「15-Sep-2019」(未来)や「14-Sep-2019」(当日)は条件に一致しないため除外されています。

このように、文字列として保存されている日付データでも、STR_TO_DATE()で変換すれば現在の日付との正確な比較が可能です。パフォーマンスやインデックス利用の観点からはDATE型での保存が推奨されますが、既存システムの都合で文字列のまま扱う必要がある場合には、非常に有効な手法といえます。

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

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

  2. MySQLで現在の日付に11日を追加する方法【DATE_ADD関数の使い方】

    はじめにMySQLでは、DATE_ADD()関数を使うことで、日付に指定した日数を簡単に加算できます。本記事では、現在の日付(CURDATE())に11日を追加する方法を、テーブル作成からクエリ実行まで具体的な例を交えて解説します。サンプルテーブルの作成まず、デモ用のテーブルを作成しましょう。mysql> create table DemoTable1994 ( ArrivalDate date ); Query OK, 0 rows affected (5.33 sec)テストデータの挿入続いて、INSERTコマンドを使用してテーブルに複数のレコードを挿入します。mysql&g