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')を使えばインデックスも活用できます。
-
MySQLで特定の日付のレコード数をカウントする方法
MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の日付に該当するレコードの件数を簡単に取得できます。この記事では、サンプルテーブルを作成し、指定した日付のデータ件数をカウントする手順を順番に解説します。 1. サンプルテーブルの作成 まず、日付型(DATE)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1946 ( ShippingDate date ); Quer
-
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コマンドを使ってテ