【MySQL】STR_TO_DATEを使って異なる形式の日付から特定日以降のレコードを取得する方法
はじめに
データベースの運用では、日付が「21/11/2019」のような文字列形式(DD/MM/YYYY)で保存されているケースによく出会います。このような場合、UNIX_TIMESTAMP() の代わりに STR_TO_DATE() 関数を使うことで、文字列の日付を正しく変換し、特定の日付以降のレコードを簡単に抽出できます。
本記事では、実際のSQL例を使いながら、その手順をわかりやすく解説します。
1. サンプルテーブルの作成
まず、日付をvarchar型で保持するテーブルを作成します。
mysql> create table DemoTable1808
(
AdmissionDate varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. テストデータの挿入
INSERTコマンドを使って、「DD/MM/YYYY」形式の日付データを登録します。
mysql> insert into DemoTable1808 values('21/11/2019');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1808 values('01/01/2018');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1808 values('26/09/2017');
Query OK, 1 row affected (0.00 sec)3. 登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1808;
実行結果は以下のとおりです。
+---------------+ | AdmissionDate | +---------------+ | 21/11/2019 | | 01/01/2018 | | 26/09/2017 | +---------------+ 3 rows in set (0.00 sec)
4. 特定日以降のレコードを取得するクエリ
ここがポイントです。STR_TO_DATE() を使って「DD/MM/YYYY」形式の文字列を日付型に変換し、比較対象の日付と照合します。フォーマット指定子 %d/%m/%Y は「日/月/年」の並びに対応しています。
mysql> select * from DemoTable1808
where str_to_date(AdmissionDate,'%d/%m/%Y') > '2018-12-31';実行結果は以下のとおりです。2019年11月21日のレコードだけが抽出されました。
+---------------+ | AdmissionDate | +---------------+ | 21/11/2019 | +---------------+ 1 row in set (0.00 sec)
補足:主なフォーマット指定子
- %d … 日(01〜31)
- %m … 月(01〜12)
- %Y … 4桁の年(例:2019)
まとめ
日付が文字列として保存されている場合でも、STR_TO_DATE() を使えば適切な日付型へ変換して比較できます。これにより、異なる形式の日付データからも柔軟に条件検索が可能になります。なお、パフォーマンスを重視する場合は、可能であれば日付カラムを DATE 型や DATETIME 型で定義しておくことをおすすめします。
-
MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法
MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude
-
MySQLでレコードを挿入しながら日付をフォーマットする方法(DATE_FORMAT活用)
MySQLでは、INSERT文の中でDATE_FORMAT()関数を使うことで、レコードを挿入する際に日付を任意の形式に整形できます。本記事では、実際にテーブルを作成し、日付をフォーマットしながらデータを挿入する手順を具体的なSQL例とともに解説します。1. テーブルの作成まず、フォーマット済みの日付文字列を格納するためのテーブルを作成します。ここでは、VARCHAR型のカラム「ShippingDate」を持つシンプルなテーブルを用意します。mysql> create table DemoTable2012 -> ( -> ShippingDate varch