【MySQL】特定の文字の後で列を分割する方法|SUBSTRING_INDEX()の使い方
特定の文字の後で列を分割するには
MySQLで、ある区切り文字(この記事ではハイフン「-」)の後にある文字列を取り出して列を分割したい場合には、SUBSTRING_INDEX()関数を使用します。基本的な構文は次のとおりです。
select substring_index(yourColumnName,'-',-1) AS anyAliasName from yourTableName;
SUBSTRING_INDEX()関数は、第2引数に指定した区切り文字が、第3引数で指定した回数だけ現れた位置を基準に文字列を切り分けます。第3引数に-1のような負の値を指定すると、末尾から数えて区切り文字より後ろの部分を取得できます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable -> ( -> StreetName text -> ); Query OK, 0 rows affected (0.60 sec)
レコードの挿入
INSERTコマンドを使って、テーブルにいくつかのレコードを追加します。住所と番号がハイフンで連結されたデータを想定しています。
mysql> insert into DemoTable values('Paris Hill St.-CA-83745646') ;
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('502 South Armstrong Street-9948443');
Query OK, 1 row affected (0.20 sec)登録済みレコードの確認
SELECT文を実行して、テーブル内のすべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行すると、次のような結果が得られます。
+------------------------------------+ | StreetName | +------------------------------------+ | Paris Hill St.-CA-83745646 | | 502 South Armstrong Street-9948443 | +------------------------------------+ 2 rows in set (0.00 sec)
特定の文字の後で列を分割するクエリ
それでは本題です。以下は、ハイフン「-」の後にある部分文字列を抽出するクエリの例です。
mysql> select substring_index(StreetName,'-',-1) AS Split from DemoTable;
実行結果は次のようになります。
+----------+ | Split | +----------+ | 83745646 | | 9948443 | +----------+ 2 rows in set (0.00 sec)
このように、SUBSTRING_INDEX()関数の第3引数に-1を指定するだけで、区切り文字より後ろの末尾部分(この例では番号に相当する数字)を簡単に抽出できます。なお、逆に区切り文字より前の部分を取得したい場合は、第3引数に正の値(たとえば1)を指定してください。住所データの整理やCSV的な連結文字列の分解など、実務でもよく使われる便利な関数なので、ぜひ活用してみてください。
-
MySQLのSELECT文で特定のカラム(列)のレコードを取得する方法
はじめにMySQLでSELECTクエリを実行する際、SELECT *を使うとすべてのカラムが取得されますが、カラム名を明示的に指定すれば、必要なカラム(列)のデータだけを効率的に取り出せます。この記事では、サンプルテーブルを作成しながら、特定のカラムのレコードを取得する手順を解説します。1. テーブルの作成まず、CREATE TABLE文でサンプル用のテーブルを作成しましょう。mysql> create table DemoTable1837 ( StudentId int NOT NULL AU
-
MySQLでハイフンより前の文字列を抽出する方法|SUBSTRING_INDEX関数の使い方
MySQLでは、SUBSTRING_INDEX() 関数を使うことで、特定の区切り文字(この例ではハイフン「-」)より前にある文字列を簡単に抽出できます。本記事では、実際にテーブルを作成し、データを挿入して、ハイフンより前の部分だけを取得する手順を解説します。 1. サンプルテーブルの作成 まず、以下のコマンドでサンプル用のテーブルを作成します。 mysql> create table DemoTable1857 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) 2. テストデータの挿入 次に、I