SQLでは文字列の操作に使う関数で「SUBSTRING」というものがあります。
この関数をマスターすればデータの更新や追加がグッと楽になります。
そこで今回はこのSUBSTRINGとその類似関数である「RIGHT関数」「LEFT関数」について解説してみたいと思います。
文字列の操作は至ってシンプルですので、この記事でしっかりとマスターしてみてください。
SUBSTRING関数とは
SUBSTRING関数とは英語で「文字列」と訳すことが出来ますが、その名の通り文字列操作に使用する関数です。
もう少し具体的に説明すると、指定した一部を切り取り、それを返す関数です。
このSUBSTRING関数はSQL系サーバー(MySQL及びSQL Server)にしかありませんが、これとよく似た類似関数(使い方については厳密には若干異なる)はほぼ全ての環境に用意されていますので、別環境で慣れ親しんだ方もすぐに理解できるはずです。
SUBSTRING関数の使い方
SUBSTRING関数の記述は至ってシンプルです。
SUBSTRING([文字列], [切り取り開始ポインタ], [切り取りたい文字数]);
第一引数には文字列を指定し、第二引数で指定した文字列のどの部分から開始するのかを指定します。
そして第三引数で文字数を指定するだけです。
それでは早速実際にコードで見てみましょう。
SELECT SUBSTRING('sample code', 1, 6);
実行結果
MariaDB [(none)]> SELECT SUBSTRING("sample code", 1, 6); +--------------------------------+ | SUBSTRING("sample code", 1, 6) | +--------------------------------+ | sample | +--------------------------------+ 1 row in set (0.000 sec)
“sample code”という文字列から単純に文字を抜き出すためのコードですが、実行結果では先頭から6文字分の文字列”sample”がキチンと抜き出されています。
開始地点のゼロ指定と切り取り文字数オーバー
SQLのSUBSTRINGでよく間違ってしまのが、開始地点のゼロ指定です。
プログラムはほとんど例外なく開始番号が「0」からスタートしますが、SQLにおけるSUBSTRINGの開始地点は「1」から始まります。
次のコードを見てみましょう。
SELECT SUBSTRING('sample code', 0, 6);
実行結果
MariaDB [(none)]> SELECT SUBSTRING("sample code", 0, 6); +--------------------------------+ | SUBSTRING("sample code", 0, 6) | +--------------------------------+ | | +--------------------------------+ 1 row in set (0.000 sec)
今回は切り取り開始ポインタを「0」に指定してみましたが、実行結果では何も切り取られていないことがわかります。
では次に、切り取り文字数を文字列より多くした場合にはどうでしょうか?
こちらもコードで確認してみましょう。
SELECT SUBSTRING('sample code', 1, 100);
実行結果
MariaDB [(none)]> SELECT SUBSTRING("sample code", 1, 100); +----------------------------------+ | SUBSTRING("sample code", 1, 100) | +----------------------------------+ | sample code | +----------------------------------+ 1 row in set (0.000 sec)
文字列より切り取り文字数が大きい場合には全体をが切り取られますが、オーバーしている部分に関してもエラーにはなりません。
RIGHT関数、LEFT関数
ここまではSUBSTRING関数の基本的な使い方について解説してみましたが、左右どちらかから切り抜きを開始したい場合には「RIGHT関数」「LEFT関数」という類似関数を使用します。
使い方も非常にシンプルで、RIGHT関数では右から何文字、LEFT関数では左から何文字というように指定していきます。
// RIGHT関数 RIGHT([対象文字列], [取得したい文字数]); // LEFT関数 LEFT([対象文字列], [取得したい文字数]);
それでは実際に使ってみましょう。
SELECT RIGHT('sample code', 4);
実行結果
MariaDB [(none)]> SELECT RIGHT('sample code', 4); +-------------------------+ | RIGHT('sample code', 4) | +-------------------------+ | code | +-------------------------+ 1 row in set (0.000 sec)
このコードはRIGHT関数を使って、文字列の終わりから4文字を切り抜くだけの単純なコードですが、実行結果でも期待通り”code”のみが切り取られていることが確認できます。
実運用での使い方の例
ここからは、実際にこのSUBSTRING関数やRIGHT関数/LEFT関数をどのように使うかについて、分かりやすく解説していきます。
SELECT句で使う
SELECT句でSUBSTRING関数を使用する場合にはテーブル+カラムを指定します。
MariaDB [sample_db]> SELECT * FROM members; +----+---------+-----+------------+ | id | name | age | birth | +----+---------+-----+------------+ | 1 | Arex | 29 | 1990-12-03 | | 2 | Noah | 23 | 1996-04-13 | | 3 | Jon | 32 | 1988-02-11 | | 4 | Jackson | 30 | 1990-10-08 | +----+---------+-----+------------+ 4 rows in set (0.000 sec) MariaDB [sample_db]> SELECT SUBSTRING(birth, 1, 4) FROM members; +------------------------+ | SUBSTRING(birth, 1, 4) | +------------------------+ | 1990 | | 1996 | | 1988 | | 1990 | +------------------------+ 4 rows in set (0.000 sec)
UPDATE句で使う
データベースの更新時にもSUBSTRINGは使用できます。
MariaDB [sample_db]> SELECT * FROM members; +----+---------+-----+------------+ | id | name | age | birth | +----+---------+-----+------------+ | 1 | Arex | 29 | 1990-12-03 | | 2 | Noah | 23 | 1996-04-13 | | 3 | Jon | 32 | 1988-02-11 | | 4 | Jackson | 30 | 1990-10-08 | +----+---------+-----+------------+ 4 rows in set (0.000 sec) MariaDB [sample_db]> UPDATE members SET name = SUBSTRING(name, 1, 1); Query OK, 4 rows affected (0.003 sec) Rows matched: 4 Changed: 4 Warnings: 0 MariaDB [sample_db]> SELECT * FROM members; +----+------+-----+------------+ | id | name | age | birth | +----+------+-----+------------+ | 1 | A | 29 | 1990-12-03 | | 2 | N | 23 | 1996-04-13 | | 3 | J | 32 | 1988-02-11 | | 4 | J | 30 | 1990-10-08 | +----+------+-----+------------+ 4 rows in set (0.000 sec)
上のコードではUPDATE句でSUBSTRING関数を使用し、メンバーの名前を頭文字以外全て削除する命令を実行しています。
まとめ
いかがでしたか?
今回はSUBSTRING関数と類似関数である「RIGHT関数」「LEFT関数」についてコードを交えながら解説してみました。
データベースを扱う上でSQL操作は頻繁に行うことになりますので、是非マスターしてみてください。