MySQLで文字列を切り出す方法について書いています。
SUBSTR関数を使うことで、文字列を切り出して、部分文字列を取得することができます。
公式のこちらにSUBSTR関数についての記載があります。
載せているSQLはMySQLのバージョン8.0.33を使って動作を確認しています。
MySQLで文字列を切り出す方法
文字列から部分文字列を切り出すときには、SUBSTR関数を使うと良いです。
例えば、下記のように部分文字列を取得することができます。
SELECT SUBSTR('This is a pen!', 6);
こうすると、文字列を1番目から数えて、6番目から最後までを取得することができます。
実際に実行すると、下記のようになります。
mysql> SELECT SUBSTR('This is a pen!', 6);
+-----------------------------+
| SUBSTR('This is a pen!', 6) |
+-----------------------------+
| is a pen! |
+-----------------------------+
1 row in set (0.00 sec)
文字列の「T
」を1番目として数えて、6番目の「i
」から後の文字列が切り出されて返ってきました。
このようにSUBSTR関数を使うことで、文字列を切り出すことができます。
FROMを使う
先ほどはカンマ(‘,’)で区切って、引数を2つ渡しましたがFROMを使うこともできます。
実際に使ってみると、同じように動作します。
mysql> SELECT SUBSTR('This is a pen!' FROM 6);
+---------------------------------+
| SUBSTR('This is a pen!' FROM 6) |
+---------------------------------+
| is a pen! |
+---------------------------------+
1 row in set (0.00 sec)
逆から数える
逆から数えて、そのあとが欲しいときにはマイナス値を指定します。
例えば、下記のようにすると、後ろから4番目の文字以降が返ってきます。
mysql> SELECT SUBSTR('This is a pen!', -4);
+------------------------------+
| SUBSTR('This is a pen!', -4) |
+------------------------------+
| pen! |
+------------------------------+
1 row in set (0.00 sec)
後ろの「!
」から数えて4番目の「p
」から後が取得できました。
FROMを使ったときにも同じように動作します。
mysql> SELECT SUBSTR('This is a pen!' FROM -4);
+----------------------------------+
| SUBSTR('This is a pen!' FROM -4) |
+----------------------------------+
| pen! |
+----------------------------------+
1 row in set (0.00 sec)
文字数を指定する
開始位置と一緒に、切り出したい文字数を指定することができます。
例えば、下記のように指定することができます。
SELECT SUBSTR('This is a pen!', 11, 3);
こうすると、スペースを含めて11文字目から、3文字取得できます。
引数としては第1引数に切り出したい文字、第2引数に開始位置、第3引数に切り出したい文字数を指定しています。
実行すると、下記のようになりました。
mysql> SELECT SUBSTR('This is a pen!', 11, 3);
+---------------------------------+
| SUBSTR('This is a pen!', 11, 3) |
+---------------------------------+
| pen |
+---------------------------------+
1 row in set (0.00 sec)
11文字目の「p
」から3文字が切り出されて、「pen
」が返ってきました。
FROMとFORを使う
FROMとFORを使って、同じように開始位置と切り出したい文字数を指定することもできます。
先ほどと同じSQLに、FROMとFORを使った場合には下記のようになります。
mysql> SELECT SUBSTR('This is a pen!' FROM 11 FOR 3);
+----------------------------------------+
| SUBSTR('This is a pen!' FROM 11 FOR 3) |
+----------------------------------------+
| pen |
+----------------------------------------+
1 row in set (0.00 sec)
FROMに開始位置を書いて、FORに切り出したい文字数を指定しました。
SUBSTRING関数は別名
SUBSTRING関数はSUBSTR関数の別名なので、同じように使うことができます。
実際に使ってみると、下記のように同じ挙動をすることが確認できました。
mysql> SELECT SUBSTRING('This is a pen!', 6);
+--------------------------------+
| SUBSTRING('This is a pen!', 6) |
+--------------------------------+
| is a pen! |
+--------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTRING('This is a pen!' FROM 6);
+------------------------------------+
| SUBSTRING('This is a pen!' FROM 6) |
+------------------------------------+
| is a pen! |
+------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBSTRING('This is a pen!', 11, 3);
+------------------------------------+
| SUBSTRING('This is a pen!', 11, 3) |
+------------------------------------+
| pen |
+------------------------------------+
1 row in set (0.00 sec)
MySQLのSUBSTR関数の引数まとめ
SUBSTR関数の引数の内容をまとめてみました。
引数 | 内容 |
---|---|
第1引数: 対象文字列 | 必須引数。切り出す対象になる文字列 |
第2引数: 開始位置 | 必須引数。対象文字列から文字列を切り出す開始位置 第3引数がない場合には、第2引数で指定した位置から最後までが返る |
第3引数: 切り出す文字数 | オプション引数。開始位置から切り出す文字数を指定する |
MySQLで文字列を切り出す方法まとめ
今回はMySQLで文字列を切り出す方法について書きました。
記事の内容をまとめると、下記のようになります。
・開始位置だけ指定されているときには、開始位置から最後まで返される。
・開始位置と切り出す文字数が指定されているときには、開始位置から文字数の分が返ってくる。
・SUBSTRING関数は別名なので、同じ挙動になる。
コメント