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

MySQLで列の最後の「/」以降の文字列をディレクトリリンクに置き換える方法

MySQLで、列に格納されたパス文字列のうち最後の「/」以降の部分を別の文字列(フォルダ名など)に置き換えたい場合は、SUBSTRING_INDEX()関数とCONCAT()関数を組み合わせると簡単に実現できます。この記事では、具体的な手順をサンプルコード付きで解説します。

1. サンプルテーブルの作成

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

mysql> create table DemoTable
-> (
-> FolderName varchar(100),
-> FolderLocation varchar(200)
-> );
Query OK, 0 rows affected (1.03 sec)

2. レコードの挿入

続いて、INSERTコマンドでテーブルにデータを追加します。

mysql> insert into DemoTable values('CProgram','C:/AllPrograms/.....');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable values('Images','E:/MyImage/home/garbage');
Query OK, 1 row affected (0.15 sec)

3. 現在のデータを確認

SELECT文でテーブル内の全レコードを表示してみます。

mysql> select *from DemoTable;

出力結果

+------------+-------------------------+
| FolderName | FolderLocation |
+------------+-------------------------+
| CProgram | C:/AllPrograms/..... |
| Images | E:/MyImage/home/garbage |
+------------+-------------------------+
2 rows in set (0.00 sec)

4. 最後の「/」以降をディレクトリ名に置き換えるUPDATE文

ここからが本題です。FolderLocation列の最後の「/」以降の文字列を、FolderName列の値に置き換えるクエリは以下の通りです。

mysql> UPDATE DemoTable SET FolderLocation = CONCAT(LEFT(FolderLocation , CHAR_LENGTH(FolderLocation ) - CHAR_LENGTH(SUBSTRING_INDEX(FolderLocation , '/', -1))),FolderName);
Query OK, 2 rows affected (0.16 sec)
Rows matched: 2 Changed: 2 Warnings: 0

クエリの仕組み

このUPDATE文は、次のような流れで動作しています。

  • SUBSTRING_INDEX(FolderLocation, '/', -1):最後の「/」より後ろの文字列を抽出します。
  • CHAR_LENGTH():元の文字列と抽出した文字列の長さをそれぞれ取得し、その差から残すべき前方部分の長さを求めます。
  • LEFT():計算した長さ分だけ先頭から文字列を取り出し、「/」までのパス部分を取得します。
  • CONCAT():取り出したパス部分にFolderNameの値を連結して、新しいパスを生成します。

5. 更新結果の確認

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

mysql> select *from DemoTable;

出力結果

+------------+-------------------------+
| FolderName | FolderLocation |
+------------+-------------------------+
| CProgram | C:/AllPrograms/CProgram |
| Images | E:/MyImage/home/Images |
+------------+-------------------------+
2 rows in set (0.00 sec)

このように、最後の「/」以降の文字列(garbageや.....など)が、それぞれの行のFolderNameの値(CProgram、Images)に置き換えられました。ファイルパスの正規化やディレクトリリンクの生成など、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのLIKE句で行を抽出し、マッチした文字列を新しい列として表示する方法

    MySQLでLIKE句を使って特定の文字列を含む行を抽出し、さらにそのマッチした文字列自体を新しい列として表示したい場合があります。このような処理には、SUBSTRING()関数とLOCATE()関数を組み合わせて使用します。ここでは、実際にサンプルテーブルを作成しながら手順を確認していきましょう。1. サンプルテーブルの作成まず、以下のようにテーブルを作成します。mysql> create table DemoTable1872 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec)2. レコードの挿

  2. MySQLでVARCHAR文字列からハイフン以降の数値を削除する方法(SUBSTRING_INDEX活用)

    MySQLで「John-232」のようなハイフンを含むVARCHAR型の文字列から、ハイフン以降の数値部分を削除したい場合があります。このような処理には、SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。SUBSTRING_INDEX()関数とはSUBSTRING_INDEX(文字列, 区切り文字, 出現回数) は、指定した区切り文字が現れる位置より前の部分文字列を返す関数です。第3引数に「1」を指定すると、区切り文字が最初に出現する位置より前の文字列だけが取得されます。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create t