SQLに限らず、プログラムでは、文字の一部を切り出して利用することはよくあります。その際、右端から何文字、または、左端から何文字を利用したい、といった用途に便利な関数が、RIGHTとLEFTです。そして、この関数はは、データベース管理ソフトにもよりますがSQLでも利用できます。今回は、RIGHT関数とLEFT関数を中心に、SQLで使える文字を切り出す関数について解説します。
SQLの文字の一部を切り出す関数
Excelの関数に詳しい方なら、文字列の左側の何文字かを切り出すLEFT関数と、右側の何文字かを切り出すRIGHT関数をご存じでしょう。どちらもセルの中の文字を簡単に加工するのに便利な関数です。プログラムやデータベースを利用するほどではない単純なリストの変換なら、Excelの表でこのような関数を使い、簡単に加工できます。
しかし、Webシステムの開発によく使われるプログラム言語では、LEFT関数とRIGHT関数は用意されていません。より高機能なsubtr関数などの文字列の一部を切り出す関数が使われます。Excelをあまり使わわない、という方にとっては、なじみのない関数かもしれません。
LEFT関数とRIGHT関数はRDBMSで使えない?
Excelでも使えるLEFT関数とRIGHT関数ですが、データベース管理ソフトによっては、使えるものと使えないものがあります。これは、文字列の操作に関しては、データベース管理ソフトによって独自の拡張が施されているからです。
なお、データベース管理ソフトの多くは、多くの独自機能を組み込んでいます。中には、文字列の切り出しにLEFT関数とRIGHT関数が組み込まれており、SQLから利用できるデータベース管理ソフトもあります。一方、プログラム言語のsubstr関数のように、より汎用的な文字列の一部を切り出す関数なら使える、といったソフトもあります。
このように、LEFT関数とRIGHT関数が使えるがデータベース管理ソフトがある一方、使えないソフトもあります。そのため、SQLを移植しようとするとエラーになることもあるので注意してください。
SQLの文字数の考え方
LEFT関数とRIGHT関数を使う場合、日本における半角文字と全角文字の扱いを意識してください。なお、今、広く使われているデータベース管理ソフトでは、日本語の文字コードをサポートしており、全角文字を1文字として扱えます。
しかし、厳密には、半角文字は1バイトで、全角文字は2バイトのため、データベース管理ソフトによっては、全角文字を2文字と数えるケースもあるので注意が必要です。もしSQLを移植する場合は、全角文字を1文字と数えるか、それとも2文字と数えるかをチェックしておきましょう。
LEFT関数とRIGHT関数の使い方
LEFT関数とRIGHT関数が使える代表的なデータベース管理ソフトは、MySQLとSQL Serverです。次から、この2つのデータベース管理ソフトの使い方について解説します。
LEFT関数とRIGHT関数の基本
LEFT関数とRIGHT関数は、2つの引数を取り、1つ目の引数が基の文字列で、2つ目の引数が文字数です。
LEFT関数
LEFT( 文字列, 文字数 )
LEFT関数の使用例 select LEFT( name, 4) as keyword from name_db;
この例では、name_dbテーブルのnameに格納された文字列の左側4文字を切り出し、keywordとして出力します。
RIGHT関数
RIGHT( 文字列, 文字数 )
RIGHT関数の使用例 select RIGHT( name, 4) as keyword from name_db;
先ほどと同じように、name_dbテーブルのnameに格納された文字列の右側4文字を切り出し、keywordとして出力する。
SQL Serverは文字数に変数を指定できる
LEFT関数とRIGHT関数が使えるのはMySQLとSQL Serverですが、文字数の使い方が違います。まず、MySQLでは、文字数に数字しか指定できません。これは、MySQLの古いバージョンから引き継がれており、MySQLのバージョン8やmariadbでも、指定できるのは数字のみです。
一方、マイクロソフト製のSQL ServerのLEFT関数とRIGHT関数では、文字数として、数字以外に変数、または列を指定できます。
OracleデータベースにはRIGHT関数が無い
Oracleデータベースは、エンタープライズ向けのデータベース管理ソフトとしては、標準とも言えるソフトです。しかし、それだけ影響力の大きなOracleデータベースでは、LEFT関数とRIGHT関数が使えません。そのため、MySQLなどで作成したLEFT関数やRIGHT関数を使ったSQLをそのまま実行してしまうと、エラーになるので注意してください。
文字の一部を切り出すならsubstr関数を
LEFT関数とRIGHT関数が使えないOracleデータベースには、文字の一部を切り出すsubstr関数が組み込まれています。ぜひ、この関数を使ってください。なお、使い方は次のとおりです。
substr( 文字列, 開始位置, 文字数 )
文字列の開始位置から、文字数分の文字を返します。
なお、このsubstr関数は、phpなどのプログラム言語で使われる文字の一部を切り出す関数と同じです。
substr関数の使用例 select substr(code, 1, 4 ) as "g-code" from table1;
この例は、table1というテーブルのcode列の左側4文字を切り出して表示するSQLです。
LEFT関数やRIGHT関数の置き換えのポイント
Oracleデータベースでは、LEFT関数とRIGHT関数が使えません。しかし、substr関数を使うことで、LEFT関数とRIGHT関数と同じ機能を実現できます。なお、LEFT関数は、文字列の左側から指定した文字数分を切り出す関数です。これは、substr関数で1文字目から指定した文字数を切り出すことで簡単に実現できます。
LEFT関数の置き換え例 LEFT( code, 3 ):文字列codeから、左側の3文字分を切り出す。 subtr( code, 1, 3 ):文字列codeの1文字目から3文字分を切り出す。
一方、RIGHT関数は文字の最後から指定した文字分を切り出すため、数字で指定するのは面倒だと思われるかもしれません。しかし、Oracleデータベースのsubstr関数は、開始位置にマイナスを指定すると、後ろから数えて、その文字数を切り出します。
RIGHT関数の置き換え例 RIGHT( code, 3 ):文字列codeから、右側の3文字分を切り出す。 substr( code, -3 ):文字列codeの後ろから3文字目以降を切り出す。
Webシステムなら文字の加工はプログラム側でも可能
Excelでは文字列を簡単に加工できるLEFT関数とRIGHT関数ですが、SQLではそれほど使う機会が無いかもしれません。特にWebシステムなど、データベースから抽出した文字列を加工するだけなら、プログラムで処理した方が簡単です。
しかし、幾つものサブクエリーで活用した複雑なSQLでリストを作り、それをWebシステムで活用するケースはよくあります。そのような、複雑なSQLを活用して、大規模なデータベースから効率よくデータを抽出し、をれを活用するようなシステムでは、そのサブクエリーで、ぜひ、SQLのLEFT関数やRIGHT関数のような文字列を加工する処理を活用してください。
まとめ
これまで解説したように、SQLにはプログラム言語のような文字列を加工する関数があり、リストを作る処理の中で使用できます。そして、このような文字を加工する関数には、Excelで使われるLEFT関数やRIGHT関数も含まれています。これらの関数をうまく活用すれば、SQLで複雑な処理を作ることも可能です。
ただし、全てのデータベース管理ソフトでLEFT関数やRIGHT関数が使えるとは限りません。そのため、他のソフトに移植する場合は、データベース管理ソフトに合わせて書き換えるようにしておきましょう。