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

MySQLで「10/12/2010」形式の日付から特定の年を抽出してテーブルのレコードを更新する方法

日付が「10/12/2010」のような文字列形式(日/月/年)で保存されている場合、STR_TO_DATE()関数で日付に変換し、YEAR()関数と組み合わせることで、特定の年に該当するレコードだけを更新できます。

基本構文

UPDATE yourTableName
SET yourColumnName1 = yourValue1
WHERE YEAR(STR_TO_DATE(yourColumnName2, '%d/%m/%Y')) = yourValue2;

サンプルテーブルの作成

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable1924
    (
    UserName varchar(20),
    UserJoiningDate varchar(40)
    );
Query OK, 0 rows affected (0.00 sec)

レコードの挿入

INSERT文を使って、いくつかのレコードを挿入します。

mysql> insert into DemoTable1924 values('Chris','10/12/2010');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('David','20/01/2011');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('Mike','20/01/2010');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1924 values('Carol','26/04/2013');
Query OK, 1 row affected (0.00 sec)

テーブル内容の確認

SELECT文ですべてのレコードを表示します。

mysql> select * from DemoTable1924;

実行結果は以下の通りです。

+----------+-----------------+
| UserName | UserJoiningDate |
+----------+-----------------+
| Chris    | 10/12/2010      |
| David    | 20/01/2011      |
| Mike     | 20/01/2010      |
| Carol    | 26/04/2013      |
+----------+-----------------+
4 rows in set (0.00 sec)

特定の年を条件にレコードを更新するクエリ

ここでは、参加日(UserJoiningDate)が2010年であるレコードのユーザー名を「Robert」に更新します。STR_TO_DATE()で文字列を日付型に変換し、YEAR()で年を抽出して条件判定しているのがポイントです。

mysql> update DemoTable1924 set UserName='Robert' where YEAR(str_to_date(UserJoiningDate,'%d/%m/%Y'))=2010;
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2 Warnings: 0

「2 rows affected」と表示されており、2010年のレコード2件(ChrisとMike)が更新されたことがわかります。

更新後の確認

もう一度テーブルの内容を確認してみましょう。

mysql> select * from DemoTable1924;

実行結果は以下の通りです。

+----------+-----------------+
| UserName | UserJoiningDate |
+----------+-----------------+
| Robert   | 10/12/2010      |
| David    | 20/01/2011      |
| Robert   | 20/01/2010      |
| Carol    | 26/04/2013      |
+----------+-----------------+
4 rows in set (0.00 sec)

補足:パフォーマンスに関する注意点

WHERE句内でSTR_TO_DATE()のような関数を使用すると、インデックスが利用できず、大規模なテーブルでは検索が遅くなる可能性があります。本番環境では、日付カラムをDATE型やDATETIME型として保存しておくことをおすすめします。そうすることで、WHERE YEAR(UserJoiningDate) = 2010のようにシンプルに記述できるだけでなく、必要に応じて範囲検索(例:UserJoiningDate >= '2010-01-01' AND UserJoiningDate < '2011-01-01')を使えばインデックスも活用できます。

  1. MySQLで特定の日付のレコード数をカウントする方法

    MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の日付に該当するレコードの件数を簡単に取得できます。この記事では、サンプルテーブルを作成し、指定した日付のデータ件数をカウントする手順を順番に解説します。 1. サンプルテーブルの作成 まず、日付型(DATE)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1946     (     ShippingDate date     ); Quer

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ