Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

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を作成してみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。