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

MySQLで特定の値だけを置換する方法:REPLACE()関数とUPDATE文の使い方

MySQLでテーブル内の特定の値を別の値に置き換えたい場合は、REPLACE()関数を使用します。テーブルのデータを更新する操作になるため、UPDATE文とSET句を組み合わせて実行します。

基本構文

update テーブル名 set 列名=replace(列名, '旧の値', '新の値');

この構文では、指定した列の中に「旧の値」が含まれている行を検索し、その部分を「新の値」に置き換えて更新します。該当する値が含まれていない行は変更されません。

サンプルテーブルの作成

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

mysql> create table DemoTable
(
    FirstName varchar(100),
    CountryName varchar(100)
);
Query OK, 0 rows affected (0.69 sec)

テストデータの挿入

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

mysql> insert into DemoTable values('John','AUS');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Bob','AUS');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Chris','US');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('David','UK');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable values('Adam','US');
Query OK, 1 row affected (0.09 sec)

現在のデータを確認

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

mysql> select *from DemoTable;

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

+-----------+-------------+
| FirstName | CountryName |
+-----------+-------------+
| John      | AUS         |
| Bob       | AUS         |
| Chris     | US          |
| David     | UK          |
| Adam      | US          |
+-----------+-------------+
5 rows in set (0.00 sec)

特定の値を置換するクエリ

ここでは、「AUS」という値を「US」に置き換えてみます。次のようなクエリを実行します。

mysql> update DemoTable set CountryName=replace(CountryName,'AUS','US');
Query OK, 2 rows affected (0.17 sec)
Rows matched: 5 Changed: 2 Warnings: 0

実行結果を見ると、「Rows matched: 5(一致した行:5件)」「Changed: 2(実際に変更された行:2件)」と表示されています。これは、CountryName列に「AUS」が含まれていた2行(JohnとBob)のみが更新されたことを意味します。すでに「US」になっているChrisやAdamの行、まったく異なる値を持つDavidの行は変更されていません。

更新後のデータ確認

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

mysql> select *from DemoTable;

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

+-----------+-------------+
| FirstName | CountryName |
+-----------+-------------+
| John      | US          |
| Bob       | US          |
| Chris     | US          |
| David     | UK          |
| Adam      | US          |
+-----------+-------------+
5 rows in set (0.00 sec)

「AUS」だった2件が「US」に正しく置き換えられ、他のレコードはそのまま維持されていることがわかります。

まとめ

MySQLで列内の特定の値のみを置換するには、UPDATE文のSET句でREPLACE()関数を呼び出すのが最もシンプルな方法です。WHERE句を併用すれば、さらに条件を絞って更新対象の行を限定することも可能なので、大量データの一部だけを修正したい場合にも活用できます。

  1. MySQLのVARCHAR型カラムから最大値を正しく取得する方法

    VARCHAR型(文字列型)のカラムに対してそのまま MAX() 関数を使用すると、値は文字列として比較されるため、「8」「901」「10001」のような数値的な大小関係が正しく評価されません。そこで、CAST() を使って値を数値型に変換してから MAX() を適用することで、正確な最大値を取得できます。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable2030 -> ( -> Value varchar(20) -> ); Query OK, 0 row

  2. MySQLで値が「0」の場合に別の列から値を取得する方法

    MySQLで値が「0」の場合に別の列から値を取得する方法MySQLでは、IF()関数を使用することで、特定の列の値が「0」だった場合に、別の列の値を代わりに取得できます。条件分岐を1つのクエリ内で簡単に実現できる便利な関数です。IF()関数の基本構文select IF(yourColumnName1=0,yourColumnName2,yourColumnName1) as anyAliasName from yourTableName;この構文では、最初の列の値が「0」であれば2番目の列の値を返し、「0」以外であれば最初の列の値をそのまま返します。サンプルテーブルの作成まず、動作確認用のテー