MySQLでvarchar型の日付レコードを現在の日付と比較する方法
MySQLでは、varchar型として保存された日付を現在の日付と比較する場合、STR_TO_DATE()関数を活用するのが効果的です。文字列形式の日付をそのまま比較すると、期待通りの結果が得られないことがあるため、まず適切な日付型に変換してから比較を行いましょう。
基本構文
varchar型の日付カラムと現在の日付を比較する際の基本的な構文は以下の通りです。
select * from yourTableName where str_to_date(yourColumnName,'yourFormatSpecifier') > curdate();
サンプルテーブルの作成
まず、varchar型の日付カラムを持つテーブルを作成します。
mysql> create table DemoTable1397 -> ( -> AdmissionDate varchar(40) -> ); Query OK, 0 rows affected (0.97 sec)
データの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。ここでは「日/月/年」の形式で日付を保存しています。
mysql> insert into DemoTable1397 values('01/04/2019');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1397 values('27/09/2019');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1397 values('29/09/2018');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1397 values('29/09/2019');
Query OK, 1 row affected (0.08 sec)登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1397;
実行結果は以下のようになります。
+---------------+ | AdmissionDate | +---------------+ | 01/04/2019 | | 27/09/2019 | | 29/09/2018 | | 29/09/2019 | +---------------+ 4 rows in set (0.00 sec)
現在の日付の確認
比較の基準となる現在の日付をCURDATE()関数で確認します。
mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-09-27 | +------------+ 1 row in set (0.00 sec)
varchar型の日付と現在日付の比較クエリ
ここからが本題です。STR_TO_DATE()を使ってvarchar型の日付を日付型に変換し、現在の日付と比較します。フォーマット指定子には「%d/%m/%Y」(日/月/年)を指定しています。
mysql> select * from DemoTable1397 -> where str_to_date(AdmissionDate,'%d/%m/%Y') > curdate();
実行結果は以下の通りです。現在の日付(2019-09-27)より後の日付を持つレコードのみが抽出されました。
+---------------+ | AdmissionDate | +---------------+ | 29/09/2019 | +---------------+ 1 row in set (0.07 sec)
ポイントまとめ
STR_TO_DATE()は、文字列として保存された日付を指定したフォーマットに従って日付型に変換する関数です。- フォーマット指定子は、実際に保存されている日付の形式に合わせて正しく指定することが重要です(例:'%d/%m/%Y'、'%Y-%m-%d'など)。
CURDATE()は現在の日付を返す関数で、これと組み合わせることで「未来の日付」や「過去の日付」のレコードを簡単に抽出できます。
このように、varchar型で保存された日付データでも、STR_TO_DATE()による変換を挟むことで、正確な日付比較が可能になります。ただし、パフォーマンスの観点からは、可能であれば日付カラム自体をDATE型やDATETIME型で定義しておくことをおすすめします。
-
MySQLに日付レコードを挿入する最も簡単な方法は?STR_TO_DATE()関数の使い方を解説
MySQLで日付レコードを挿入・変換するには?MySQLでは、STR_TO_DATE() 関数を使うことで、文字列として保存された日付データを日付形式に変換できます。以下が基本の構文です。SELECT STR_TO_DATE(yourColumnName, %b %Y) FROM yourTableName;この記事では、実際にテーブルを作成し、「Jan 2018」のような「月 年」形式の文字列データを日付に変換する手順を、具体例とともにわかりやすく解説します。ステップ1:テーブルを作成するまず、サンプル用のテーブルを作成しましょう。ここでは入社年月を格納するカラムを持つテーブルを定義します。
-
MySQLで現在の日付から1日以上の行を抽出する方法(INTERVALの使い方)
現在の日時を基準に「1日前以降」のデータを取得したい場合は、MySQLのINTERVALを使うと簡単に実現できます。この記事では、サンプルテーブルを作成し、実際に条件に合う行を抽出するまでの手順を順番に解説します。 1. 現在の日付を確認する まず、CURDATE()関数で現在の日付を確認しておきましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2019-11-29 | +------------+ 1 row in set (0.00 sec) 現在の日付は「2019-11-29」