MySQLのVARCHAR型カラムで末尾の文字を削除し、新しい値(VARCHAR番号)に置き換える方法
はじめに
MySQLでは、CONCAT()関数とSUBSTRING()関数を組み合わせることで、VARCHAR型カラムの末尾の文字を削除し、その位置に新しい値を追加することができます。この記事では、実際のSQL例を使ってその手順をわかりやすく解説します。
ステップ1:テーブルを作成する
まず、VARCHAR型のカラムを持つテーブルを作成します。
mysql> create table DemoTable
(
Value varchar(100)
);
Query OK, 0 rows affected (1.80 sec)
ステップ2:レコードを挿入する
INSERT文を使って、テーブルにいくつかのレコードを追加します。
mysql> insert into DemoTable values('100');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('1244');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('15789');
Query OK, 1 row affected (0.18 sec)
ステップ3:現在のレコードを確認する
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
以下のような出力が得られます。
+-------+ | Value | +-------+ | 100 | | 1244 | | 15789 | +-------+ 3 rows in set (0.07 sec)
ステップ4:末尾の文字を削除して新しい値を追加するUPDATE文
ここが本題です。各レコードの末尾の1文字を削除し、代わりに「55」を追加するには、次のクエリを実行します。
mysql> update DemoTable set Value=concat(substring(Value,1,length(Value)-1), '55'); Query OK, 3 rows affected (0.23 sec) Rows matched: 3 Changed: 3 Warnings: 0
このクエリの仕組みを分解して見てみましょう。
- length(Value):文字列全体の長さを取得します。
- substring(Value, 1, length(Value)-1):先頭から「長さ−1」文字分を取り出すことで、末尾の1文字を除外します。
- concat(..., '55'):取り出した文字列の後ろに新しい値「55」を連結します。
ステップ5:更新結果を確認する
もう一度テーブルの内容を確認してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+--------+ | Value | +--------+ | 1055 | | 12455 | | 157855 | +--------+ 3 rows in set (0.00 sec)
出力を見ると、「100」→「1055」、「1244」→「12455」、「15789」→「157855」と、それぞれ末尾の1文字が削除され、代わりに「55」が追加されていることがわかります。
まとめ
VARCHAR型のカラムに対しては、concat(substring(カラム名, 1, length(カラム名)-1), '追加したい文字列')という構文を使うことで、末尾の文字を削除しながら新しい値へ置き換えることができます。文字列の一部を動的に更新したい場面で、ぜひ活用してみてください。
-
MySQLで英字と数字が混在する列の値を正しくソートする方法
MySQLでは、英字と数字が混在するデータ(例:「J23」「C13」など)が格納された列を単純にORDER BY句でソートすると、すべて文字列として扱われるため、意図した通りの順序にならないことがあります。本記事では、LEFT関数・SUBSTR関数・CAST関数を組み合わせて、文字部分と数値部分をそれぞれ正しく並べ替える方法を、実際のSQL例とともに解説します。 サンプルテーブルの作成 まず、ソート対象となるテーブルを作成しましょう。 mysql> create table DemoTable -> ( -> Code varchar(20) ->
-
【MySQL】特定の列の値を先頭に固定し、残りの行をランダム順で表示する方法
MySQLで行をランダムに並べ替えるには RAND() 関数を使用しますが、さらに「特定の列の値だけは必ず先頭に固定して表示したい」という場合には、ORDER BY 句と組み合わせることで実現できます。この記事では、特定の値を持つ行を常に最上位に固定しつつ、それ以外の行をランダムな順序で表示する方法を、実際のSQL例とともに解説します。1. サンプルテーブルを作成するまず、数値を格納するシンプルなテーブルを作成します。mysql> create table DemoTable1921 ( Numb