SQLでテーブルから取得したデータの文字数を知りたい際、各データベース毎に桁数取得用の関数が用意されています。
MySQLやOracle, PostgresSQLでは「LENGTH関数」、AccessやSQL Serverでは「LEN関数」などが利用可能です。
SQLで桁数を取得するといっても、バイト単位や文字数単位など利用する関数によって取得結果が異なります。
本記事では、MySQLデータベースを使って「LENGTH関数」と「CHAR_LENGTH関数」の使い方をご紹介していきたいと思います。
目次
SQLで桁数(バイト数)を取得 LENGTH関数の使い方
まずSQLで桁数をバイト単位で取得するための、LENGTH関数の基本的な使い方をご紹介していきたいと思います。
今回はサンプルとして「sample」テーブルに下記のデータを用意しています。
+--------------------+ | col1 | +--------------------+ | 山田花子 | | たなかはじめ | | EricJames | | 12345 | | 1.23 | +--------------------+
基本的な使い方
LENGTH関数の基本的な使い方は非常に簡単で、引数に対象の文字列を指定するだけです。
テーブルから取得する場合はカラム名を指定することになりますね。
SELECT LENGTH([文字列]) [from テーブル名];
サンプル
ではまずはテーブルからの取得ではなく、直接LENGTH関数の引数に指定した文字列の桁数をバイト単位で取得してみましょう。
mysql> SELECT LENGTH("12345"), LENGTH("abcde"), LENGTH("あいうえお"), LENGTH("漢字"); +-----------------+-----------------+---------------------------+------------------+ | LENGTH("12345") | LENGTH("abcde") | LENGTH("あいうえお") | LENGTH("漢字") | +-----------------+-----------------+---------------------------+------------------+ | 5 | 5 | 15 | 6 | +-----------------+-----------------+---------------------------+------------------+ 1 row in set (0.00 sec)
文字コードや日本語・漢字で指定した文字によっては、サンプルと同じような出力結果とならないことがあります。
MySQLのデフォルトではUTF8の文字コードが設定されており、英数字は1文字1バイト、日本語・漢字は1文字3バイトが基本として表示されることを把握しておきましょう。
次にテーブルに格納した値を同様にLENGTH関数で桁数取得したサンプルをご紹介します。
mysql> SELECT col1, LENGTH(col1) FROM sample; +--------------------+--------------+ | col1 | LENGTH(col1) | +--------------------+--------------+ | 山田花子 | 12 | | たなかはじめ | 18 | | EricJames | 9 | | 12345 | 5 | | 1.23 | 4 | +--------------------+--------------+ 5 rows in set (0.00 sec)
どのカラム情報か分かりやすくするため、カラムに格納されている値と桁数を別々に出力しています。
SQLで桁数(文字数)を取得 CHAR_LENGTH関数の使い方
SQLで桁数を文字数単位で取得したい場合には「CHAR_LENGTH関数」を利用します。
サンプルのデータは上述した「LENGTH関数」と同じデータを利用します。
基本的な使い方
CHAR_LENGTH関数に関しても、引数に桁数をチェックしたい値を設定するだけで利用可能です。
SELECT CHAR_LENGTH([文字列]) [from テーブル名];
サンプル
ではLENGTH関数で利用した値と全く同じ値を指定して、出力結果の違いを見ていきましょう。
mysql> SELECT CHAR_LENGTH("12345"), CHAR_LENGTH("abcde"), CHAR_LENGTH("あいうえお"), CHAR_LENGTH("漢字"); +----------------------+----------------------+--------------------------------+-----------------------+ | CHAR_LENGTH("12345") | CHAR_LENGTH("abcde") | CHAR_LENGTH("あいうえお") | CHAR_LENGTH("漢字") | +----------------------+----------------------+--------------------------------+-----------------------+ | 5 | 5 | 5 | 2 | +----------------------+----------------------+--------------------------------+-----------------------+ 1 row in set (0.00 sec)
英数字に関しては結果が変わりませんが、日本語や漢字は文字数の桁で表示されるように変わっていますね。
次にテーブルから取得した値も同様に、CHAR_LENGTH関数で桁数を取得してみましょう。
mysql> SELECT col1, CHAR_LENGTH(col1) FROM sample; +--------------------+-------------------+ | col1 | CHAR_LENGTH(col1) | +--------------------+-------------------+ | 山田花子 | 4 | | たなかはじめ | 6 | | EricJames | 9 | | 12345 | 5 | | 1.23 | 4 | +--------------------+-------------------+ 5 rows in set (0.01 sec)
SQLで桁数を条件式として取得してみよう
ちなみにSQLで桁数を取得するLENGTH関数やCHAR_LENGTH関数は、SELECT句だけでなくWHERE句の条件としても利用可能です。
サンプル
まずはLENGTH関数を利用して5バイト以上の桁数が設定された値のみを取得してみたいと思います。
mysql> SELECT col1, LENGTH(col1) FROM sample WHERE LENGTH(col1) >= 5; +--------------------+--------------+ | col1 | LENGTH(col1) | +--------------------+--------------+ | 山田花子 | 12 | | たなかはじめ | 18 | | EricJames | 9 | | 12345 | 5 | +--------------------+--------------+ 4 rows in set (0.00 sec)
次に上記SQLのLENGTH関数をCHAR_LENGTH関数に置き換えて実施してみましょう。
mysql> SELECT col1, CHAR_LENGTH(col1) FROM sample WHERE CHAR_LENGTH(col1) >= 5; +--------------------+-------------------+ | col1 | CHAR_LENGTH(col1) | +--------------------+-------------------+ | たなかはじめ | 6 | | EricJames | 9 | | 12345 | 5 | +--------------------+-------------------+ 3 rows in set (0.01 sec)
ご確認頂けるように文字列単位の桁数が条件となったため、取得されるデータが変わっていますね。
さいごに:SQLで桁数取得の関数を使いこなそう!
本記事では、SQLで桁数を取得するために利用される「LENGTH関数」と「CHAR_LENGTH関数」の使い方についてご紹介してきました。
各種データベースで利用可能な関数は異なりますが、基本的な使い方については同じです。
ぜひご利用のデータベースで桁数取得関数を活用して、効果的なSQLを作成してみてください。
データベース毎に細かい仕様は異なりますので、実際に利用される際はデータベース毎の仕様に沿ってご利用ください。