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

【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 型で定義しておくことをおすすめします。

  1. MySQLでAND・OR演算子を組み合わせた単一クエリを使って特定のレコードを取得する方法

    MySQLでは、AND演算子とOR演算子をWHERE句で組み合わせることで、複数の条件を指定しながら特定のレコードを1つのクエリで取得できます。本記事では、実際にテーブルを作成し、データを挿入して、AND・ORを組み合わせたクエリの動作を確認していきます。 1. テーブルの作成 まず、CREATE TABLE文でサンプル用のテーブルを作成します。 mysql> create table DemoTable2015 -> ( -> StudentId int, -> StudentName varchar(20), -> Stude

  2. MySQLでレコードを挿入しながら日付をフォーマットする方法(DATE_FORMAT活用)

    MySQLでは、INSERT文の中でDATE_FORMAT()関数を使うことで、レコードを挿入する際に日付を任意の形式に整形できます。本記事では、実際にテーブルを作成し、日付をフォーマットしながらデータを挿入する手順を具体的なSQL例とともに解説します。1. テーブルの作成まず、フォーマット済みの日付文字列を格納するためのテーブルを作成します。ここでは、VARCHAR型のカラム「ShippingDate」を持つシンプルなテーブルを用意します。mysql> create table DemoTable2012 -> ( -> ShippingDate varch