MySQLで最後のスラッシュ以降のテキストを抽出する方法
MySQLで文字列から最後のスラッシュ(/)以降のテキストを抽出するには、substring_index() 関数を使用します。この関数を使うことで、区切り文字を基準に文字列を分割し、指定した位置の部分を簡単に取得できます。
substring_index() の基本構文
SELECT substring_index(カラム名, '/', -1) AS 別名 FROM テーブル名;
第3引数に -1 を指定すると、区切り文字が最後に現れた位置より後ろの部分文字列が返されます。正の数を指定した場合は左から、負の数を指定した場合は右から数える点がポイントです。
サンプルテーブルの作成
それでは、実際に動作を確認するためのテーブルを作成しましょう。テーブル作成のクエリは以下のとおりです。
mysql> create table selectTextAfterLastSlashDemo - > ( - > UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY, - > UserPathDirectory varchar(200) - > ); Query OK, 0 rows affected (0.54 sec)
テストデータの挿入
次に、INSERTコマンドを使ってパス情報のレコードをいくつか登録します。
mysql> insert into selectTextAfterLastSlashDemo(UserPathDirectory)
values('C:/MyFolder1/MyEntityFramework');
Query OK, 1 row affected (0.18 sec)
mysql> insert into selectTextAfterLastSlashDemo(UserPathDirectory)
values('D:/MySpringFrameworkDemo');
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectTextAfterLastSlashDemo(UserPathDirectory)
values('E:/Java/MyRootFolder/Source/AllHibernateDemo');
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectTextAfterLastSlashDemo(UserPathDirectory) values('C:/Program
Files/MySQL/Server 8.0');
Query OK, 1 row affected (0.20 sec)
mysql> insert into selectTextAfterLastSlashDemo(UserPathDirectory)
values('C:/John/Folder1/Folder2');
Query OK, 1 row affected (0.10 sec)登録データの確認
SELECT文ですべてのレコードを表示して確認します。
mysql> select *from selectTextAfterLastSlashDemo;
以下の出力のように、パスが格納されていることがわかります。
+--------+----------------------------------------------+ | UserId | UserPathDirectory | +--------+----------------------------------------------+ | 1 | C:/MyFolder1/MyEntityFramework | | 2 | D:/MySpringFrameworkDemo | | 3 | E:/Java/MyRootFolder/Source/AllHibernateDemo | | 4 | C:/Program Files/MySQL/Server 8.0 | | 5 | C:/John/Folder1/Folder2 | +--------+----------------------------------------------+ 5 rows in set (0.00 sec)
最後のスラッシュ以降のテキストを取得するクエリ
いよいよ、最後のスラッシュ以降のテキストを取得するクエリを実行します。
mysql> select substring_index(UserPathDirectory,'/',-1) as TextAfterLastSlash from selectTextAfterLastSlashDemo;
実行結果は以下のとおりです。各パスの末尾にあるフォルダ名やファイル名だけが抽出されています。
+-----------------------+ | TextAfterLastSlash | +-----------------------+ | MyEntityFramework | | MySpringFrameworkDemo | | AllHibernateDemo | | Server 8.0 | | Folder2 | +-----------------------+ 5 rows in set (0.00 sec)
まとめ
このように、substring_index() 関数に区切り文字「/」と -1 を指定するだけで、パスの最後の要素を簡単に取り出せます。ファイルパスやURLからファイル名・末尾のディレクトリ名を取得したい場合に非常に便利なテクニックなので、ぜひ活用してみてください。
-
MySQLのDISTINCTとGROUP BYの違いとは?使い分け方を実例付きで解説
DISTINCTとGROUP BY、どちらを使うべき? MySQLで重複データを処理する場合、「SELECT DISTINCT」と「GROUP BY」のどちらを使えばよいか迷うことがあります。この記事では、それぞれの特徴と使い分けのポイントを、実際のSQL実行例を交えてわかりやすく解説します。 SELECT DISTINCTで重複する値を除外する SELECT DISTINCTは、指定したカラムの一意な値(重複しない値)を取得するために使います。重複レコードを取り除く目的で利用されるほか、MAXやAVGといった集計関数と組み合わせることも可能です。単一のカラムに対して適用できるのが特徴です。
-
MySQLでテーブルの最後の10件のレコードを取得する方法
MySQLでテーブルの末尾にある10行(最新の10件)を取得したい場合は、SELECT文とLIMIT句を組み合わせたサブクエリを利用します。この記事では、実際にテーブルを作成し、データを挿入しながら、最後の10件を取得するクエリの手順を具体的に解説します。 1. サンプルテーブルの作成 まず、動作確認用のテーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected