【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型での保存が推奨されますが、既存システムの都合で文字列のまま扱う必要がある場合には、非常に有効な手法といえます。
-
MySQLのフィールドに現在の日付を設定する方法(UNIX_TIMESTAMP(now)の使い方)
MySQLでは、unix_timestamp()関数を使うことで、現在の日時をUNIXタイムスタンプとして取得し、テーブルのフィールドに簡単に設定できます。この記事では、実際にテーブルを作成し、現在の日付(UNIXタイムスタンプ)をフィールドに設定する手順を解説します。UNIXタイムスタンプとはUNIXタイムスタンプとは、1970年1月1日00:00:00 UTCからの経過秒数を表す数値です。日時を整数として扱えるため、比較や計算が容易になり、データベースでの時間管理によく利用されます。サンプルテーブルの作成まず、以下のようにCREATE TABLE文でテーブルを作成します。mysql>
-
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