MySQLでドットより前の文字列を一括置換する方法:CONCATとSUBSTRING_INDEXの活用術
MySQLで、小数点(ドット)より前の部分だけを別の文字列に置き換えたい場面は意外と多くあります。そんなときに役立つのが、CONCAT() 関数と SUBSTRING_INDEX() 関数を組み合わせた方法です。この記事では、実際のテーブルを使いながら手順をわかりやすく解説します。
1. テーブルの作成
まずはサンプル用のテーブルを作成します。
mysql> create table DemoTable1424
-> (
-> Value varchar(60)
-> );
Query OK, 0 rows affected (0.56 sec)
2. サンプルデータの挿入
次に、INSERT文を使っていくつかのレコードを登録します。
mysql> insert into DemoTable1424 values('567.78483733');
Query OK, 1 row affected (0.78 sec)
mysql> insert into DemoTable1424 values('1023.45252443');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1424 values('7893322.5635543434');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1424 values('90944.665665');
Query OK, 1 row affected (0.14 sec)3. 登録データの確認
SELECT文で全レコードを表示してみましょう。
mysql> select * from DemoTable1424;
以下のような出力が得られます。
+--------------------+
| Value |
+--------------------+
| 567.78483733 |
| 1023.45252443 |
| 7893322.5635543434 |
| 90944.665665 |
+--------------------+
4 rows in set (0.00 sec)
4. ドットより前の文字列を置き換えるUPDATEクエリ
ここが本題です。ドットより前の部分を「10000」に置き換えるには、次のように CONCAT() と SUBSTRING_INDEX() を組み合わせます。
mysql> update DemoTable1424
-> set Value=concat('10000.',substring_index(Value ,'.',-1));
Query OK, 4 rows affected (0.13 sec)
Rows matched: 4 Changed: 4 Warnings: 0
このクエリのポイントは、SUBSTRING_INDEX(Value, '.', -1) の部分です。第3引数に「-1」を指定することで、ドット以降(右側)の文字列のみを抽出できます。その結果に対して、置き換え後の文字列「10000.」をCONCATで連結することで、整数部だけを入れ替えています。
5. 更新結果の確認
もう一度テーブルの中身を確認してみましょう。
mysql> select * from DemoTable1424;
実行結果は以下の通りです。
+------------------+
| Value |
+------------------+
| 10000.78483733 |
| 10000.45252443 |
| 10000.5635543434 |
| 10000.665665 |
+------------------+
4 rows in set (0.00 sec)
まとめ
SUBSTRING_INDEX() の第3引数に「-1」を指定すれば区切り文字より後ろの部分、「1」を指定すれば前の部分を取得できることを覚えておくと便利です。今回のようにCONCAT()と組み合わせれば、文字列の一部だけを柔軟に置き換えることができます。ログデータやID形式の文字列を一括修正したいときなどに、ぜひ活用してみてください。
-
MySQLで列(カラム)の値を置き換える方法|UPDATE文の使い方を解説
MySQLでテーブルの特定の列(カラム)の値を置き換えたい場合には、UPDATE文を使用します。WHERE句で対象のレコードを指定することで、該当する行だけを安全に更新できます。この記事では、実際のSQLサンプルを使いながら、列の値を置き換える手順を順番に解説していきます。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, Score int ); Query
-
MySQLクエリで「Empty set」を別の値に置き換える方法
MySQLでは、該当するレコードが存在しない場合に返されるNULL値を、COALESCE関数を使って別の値に置き換えることができます。検索結果が空になったときに、デフォルト値を表示させたい場面で非常に便利です。COALESCE関数とはCOALESCEは、引数として渡された複数の値の中から、最初にNULLではない値を返す関数です。集計関数(MAXやSUMなど)の結果がNULLになるケースでは、第2引数で指定した代替値が代わりに返されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成します。mysql> create table DemoTable -> ( -&