MySQLでスラッシュより前の値だけを表示するためにvarchar列の行を一括更新する方法
MySQLで「John/Smith」のようにスラッシュ(/)で区切られた文字列から、スラッシュより前の部分だけを取り出して列全体を更新したい場合があります。このようなときは、UPDATEコマンドとSUBSTRING_INDEX()関数を組み合わせることで実現できます。
本記事では、実際のサンプルを使いながら、varchar列に保存されたスラッシュ区切りの値を、スラッシュより前の値へ一括更新する手順を解説します。
1. サンプルテーブルの作成
まず、テーブルを作成します。
mysql> create table demo69 -> ( -> name varchar(40) -> ); Query OK, 0 rows affected (5.04 sec)
ここでは「name」というvarchar型のカラムを持つ「demo69」テーブルを作成しました。
2. テストデータの挿入
次に、INSERTコマンドを使ってスラッシュ区切りの名前データを挿入します。
mysql> insert into demo69 values('John/Smith');
Query OK, 1 row affected (0.83 sec)
mysql> insert into demo69 values('David/Miller');
Query OK, 1 row affected (0.23 sec)
mysql> insert into demo69 values('Chris/Brown');
Query OK, 1 row affected (0.40 sec)
mysql> insert into demo69 values('Carol/Taylor');
Query OK, 1 row affected (0.36 sec)3. 現在のデータを確認する
SELECT文でテーブル内のレコードを表示してみましょう。
mysql> select *from demo69;
実行すると、次のような結果が出力されます。
+--------------+ | name | +--------------+ | John/Smith | | David/Miller | | Chris/Brown | | Carol/Taylor | +--------------+ 4 rows in set (0.03 sec)
4. スラッシュより前の値へ一括更新する
ここで本題です。すべての行を「姓のみ」の状態に更新するには、次のようなUPDATEクエリを実行します。
mysql> update demo69 -> set name=substring_index(name,'/',1); Query OK, 4 rows affected (0.13 sec) Rows matched: 4 Changed: 4 Warnings: 0
SUBSTRING_INDEX()関数は、「SUBSTRING_INDEX(対象文字列, 区切り文字, 取得位置)」という形式で使用し、指定した区切り文字が現れる前までの部分文字列を返します。第3引数に「1」を指定することで、最初のスラッシュより前の文字列を取得できるのです。
5. 更新後のデータを確認する
もう一度SELECT文でテーブルの中身を確認します。
mysql> select *from demo69;
実行結果は次のとおりです。
+-------+ | name | +-------+ | John | | David | | Chris | | Carol | +-------+ 4 rows in set (0.00 sec)
まとめ
このように、UPDATE文とSUBSTRING_INDEX()関数を組み合わせれば、スラッシュ区切りのvarchar列のデータを、スラッシュより前の値へ簡単に一括更新できます。「John/Smith」→「John」のように名前部分だけを残したい場合や、区切り文字で分割した片側の値だけをデータとして整形したい場合に非常に便利なテクニックなので、ぜひ活用してください。
-
MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)
MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858  
-
【MySQL】特定の列の値を先頭に固定し、残りの行をランダム順で表示する方法
MySQLで行をランダムに並べ替えるには RAND() 関数を使用しますが、さらに「特定の列の値だけは必ず先頭に固定して表示したい」という場合には、ORDER BY 句と組み合わせることで実現できます。この記事では、特定の値を持つ行を常に最上位に固定しつつ、それ以外の行をランダムな順序で表示する方法を、実際のSQL例とともに解説します。1. サンプルテーブルを作成するまず、数値を格納するシンプルなテーブルを作成します。mysql> create table DemoTable1921 ( Numb