MySQLで日付文字列を比較する方法|STR_TO_DATE()関数の使い方
MySQLで日付文字列を比較する方法
MySQLで日付文字列を比較するには、STR_TO_DATE()関数を使用します。この関数は、指定したフォーマットに従って文字列をDATE型の日付値に変換するため、varchar型など文字列として保存された日付データでも、正確な日付比較が可能になります。
ここでは、「dd.mm.yyyy」形式(例:10.01.2019)で保存された日付文字列を、特定の日付と比較する手順を解説します。
ステップ1:サンプルテーブルを作成する
まず、日付文字列を保存するためのテーブルを作成します。
mysql> create table DemoTable712 (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
ArrivalDate varchar(100)
);
Query OK, 0 rows affected (0.65 sec)
ステップ2:レコードを挿入する
insertコマンドを使って、テーブルにいくつかのレコードを挿入します。
mysql> insert into DemoTable712(ArrivalDate) values('10.01.2019');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable712(ArrivalDate) values('11.12.2018');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable712(ArrivalDate) values('01.11.2017');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable712(ArrivalDate) values('20.06.2016');
Query OK, 1 row affected (0.23 sec)ステップ3:テーブルの内容を確認する
select文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable712;
実行結果は以下のとおりです。
+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 1 | 10.01.2019 |
| 2 | 11.12.2018 |
| 3 | 01.11.2017 |
| 4 | 20.06.2016 |
+----+-------------+
4 rows in set (0.00 sec)
ステップ4:STR_TO_DATE()で日付文字列を比較する
以下が、日付文字列を比較するクエリです。STR_TO_DATE()で文字列を日付値に変換してから、比較対象の日付と一致するかどうかを判定します。
mysql> select *from DemoTable712 where str_to_date(ArrivalDate,'%d.%m.%Y')='2017-11-01';
実行結果は以下のとおりです。2017年11月1日のレコードだけが正しく抽出されました。
+----+-------------+
| Id | ArrivalDate |
+----+-------------+
| 3 | 01.11.2017 |
+----+-------------+
1 row in set (0.00 sec)
フォーマット指定子の意味
STR_TO_DATE()の第2引数に指定する主なフォーマット指定子は以下のとおりです。
%d:日(01〜31)%m:月(01〜12)%Y:4桁の年(例:2019)
今回のサンプルでは、データが「日.月.年」の順で保存されているため、'%d.%m.%Y'を指定しています。実際のデータの保存形式に合わせて、指定子を適宜変更してください。
補足:インデックスとパフォーマンスについて
WHERE句でカラムに関数を適用すると、インデックスが利用されず、検索が遅くなる場合があります。日付比較を頻繁に行うテーブルでは、カラムの型をあらかじめDATE型にしておくのがおすすめです。すでに文字列で保存している場合は、STR_TO_DATE()を活用してDATE型カラムへの移行を検討するとよいでしょう。
-
【MySQL】STR_TO_DATEを使ってAdmissionDateが現在の日付より前のレコードを比較・抽出する方法
はじめに MySQLでは、文字列として保存された日付データと現在の日付を比較したいケースがあります。本記事では、STR_TO_DATE()関数を使って文字列形式の日付を日付型に変換し、CURDATE()で取得した現在の日付と比較する方法を、具体的なサンプルコードとともに解説します。 テーブルの作成 まず、サンプル用のテーブルを作成します。ここでは、AdmissionDate列をvarchar(50)型として定義しています。 mysql> create table DemoTable ( AdmissionDate varchar(50) ); Query OK, 0 rows
-
Pythonで日付を比較する方法をわかりやすく解説
Pythonのdateオブジェクトは、すべての比較演算子をサポートしています。そのため、datetimeモジュールを使って日付オブジェクトを作成・操作している場合は、<、>、<=、>=、== などの演算子をそのまま使用できます。これにより、入力値のバリデーションなどで日付を比較・チェックする処理が非常にシンプルに書けます。基本的な比較の例from datetime import datetime from datetime import timedelta today = datetime.today() yesterday = today - timedelta(d