文字列の文字数をカウントする関数
SQLで「文字列の文字数を取得したい」と思ったときに、どの関数を使えばいいのかわからない人もいるのではないでしょうか?
文字数を調べて取得する関数は、DBMSごとに異なります。
ここでは、DBMSごとに文字数を取得する関数について解説します。
文字数の多い順にソートするといった、条件を指定して取得する方法も合わせて見ていきましょう。
LEN関数
LEN関数は、指定した文字列の文字数をカウントして返す関数です。
「Access」と「SQLServer」で使えます。使い方は次の通りです。
LEN('文字数を取得したい文字列');
サンプルコードで動きを確認してみます。
SELECT LEN('ポテパンスタイル');
■実行結果
8
DATALENGTH関数
DATALENGTH関数は、指定した文字列のバイト数を取得する関数です。
「SQLServer」で使えます。
DATALENGTH('文字数を取得したい文字列');
こちらもサンプルコードを確認してみましょう。
SELECT DATALENGTH('ポテパンスタイル');
■実行結果
24
このように、文字列のバイト数を取得できます!
LENGTH関数
「Oracle」「PostgreSQL」「MySQL」で文字数を取得したい場合は、LENGTH関数を使いましょう。
LENGTH関数は、文字列の長さをバイト単位で取得します。
LENGTH('文字数を取得したい文字列');
使い方は次の通りです。
SELECT LENGTH('ポテパンスタイル');
■実行結果
+------------------------------------+ | LENGTH('ポテパンスタイル') | +------------------------------------+ | 24 | +------------------------------------+ 1 row in set (0.03 sec)
CHAR_LENGTH関数 / CHARACTER_LENGTH関数
「MySQL」「PostgreSQL」で文字数を取得するには、CHAR_LENGTH関数 / CHARACTER_LENGTH関数が使えます。
2つは関数名が異なりますが、機能は同じです。
漢字やひらがな、カタカナなどのマルチバイト文字であっても、文字列の長さは1文字として認識されます。
CHAR_LENGTH('文字数を取得したい文字列'); CHARACTER_LENGTH('文字数を取得したい文字列');
サンプルコードで表示を確認してみましょう。
SELECT CHARACTER_LENGTH('ポテパンスタイル');
■実行結果
+-----------------------------------------+ | CHAR_LENGTH('ポテパンスタイル') | +-----------------------------------------+ | 8 | +-----------------------------------------+ 1 row in set (0.01 sec)
CHARACTER_LENGTH関数も確認してみます。
SELECT CHARACTER_LENGTH('ポテパンスタイル');
■実行結果
+----------------------------------------------+ | CHARACTER_LENGTH('ポテパンスタイル') | +----------------------------------------------+ | 8 | +----------------------------------------------+ 1 row in set (0.01 sec)
文字数を条件指定して取得する
ここでは、文字数のカウントに条件をつけて取得する方法を解説します。
特定の文字数のデータを取得する
テーブル内の特定の文字数でデータを取得したい場合は、文字数取得関数をWHERE句で指定します。
SELECT * FROM テーブル名 WHERE 文字数取得関数(カラム名) = 取得したい文字数;
サンプルで表示を確認してみましょう。
確認用に次のテーブルを用意しました。
mysql> SELECT * FROM items; +-----------+ | item_name | +-----------+ | pen | | eraser | | scissors | | pencil | | ruler | | compass | +-----------+ 6 rows in set (0.00 sec)
ここでは、文字数が6文字のものを取得してみます。
mysql> SELECT * FROM items WHERE LENGTH(item_name) = 6; +-----------+ | item_name | +-----------+ | eraser | | pencil | +-----------+ 2 rows in set (0.00 sec)
このように、6文字のitem_nameのデータが取得できました。
他の関数でも同様に取得可能です。
mysql> SELECT * FROM items WHERE CHAR_LENGTH(item_name) = 6; +-----------+ | item_name | +-----------+ | eraser | | pencil | +-----------+ 2 rows in set (0.00 sec)
特定の文字数以上のデータを取得する
指定した文字数以上のデータを取得したい場合は、「=」を「>=」や「>」にすればOKです。
SELECT * FROM テーブル名 WHERE 文字数取得関数(カラム名) >= 取得したい文字数;
同じく「item_name」で6文字以上のデータを取得したい場合は、次のようになります。
mysql> SELECT * FROM items WHERE CHAR_LENGTH(item_name) >= 6; +-----------+ | item_name | +-----------+ | eraser | | scissors | | pencil | | compass | +-----------+ 4 rows in set (0.00 sec)
「>=」を「>」にすると次の通りです。
mysql> SELECT * FROM items WHERE CHAR_LENGTH(item_name) > 6; +-----------+ | item_name | +-----------+ | scissors | | compass | +-----------+ 2 rows in set (0.01 sec)
特定の文字数以下のデータを取得する
指定した文字数以下のデータを取得したい場合は、「=」を「<=」や「<」にすればOKです。
SELECT * FROM テーブル名 WHERE 文字数取得関数(カラム名) <= 取得したい文字数;
「item_name」で6文字以下のデータを取得したい場合は、次のようになります。
mysql> SELECT * FROM items WHERE CHAR_LENGTH(item_name) <= 6; +-----------+ | item_name | +-----------+ | pen | | eraser | | pencil | | ruler | +-----------+ 4 rows in set (0.00 sec)
「<=」を「<」にすると次の通りです。
mysql> SELECT * FROM items WHERE LENGTH(item_name) < 6; +-----------+ | item_name | +-----------+ | pen | | ruler | +-----------+ 2 rows in set (0.02 sec)
文字数の多い順、少ない順でソートする方法
文字数を多い順や少ない順でソートしたい場合は、「ORDER BY句」を使うことで実現可能です。
ソートする場合は、次のように記述します。
mysql> SELECT * FROM items ORDER BY 文字数取得関数(カラム名) DESC(ASC);
文字数が多い順でソートする際は「DESC」を、少ない順でソートする際は「ASC」を使いましょう。
サンプルで表示を確認してみます。
+-----------+ | item_name | +-----------+ | scissors | | compass | | eraser | | pencil | | ruler | | pen | +-----------+ 6 rows in set (0.01 sec)
文字数の多い順でソートされているのがわかります。
次に、文字数が少ない順でソートします。
mysql> SELECT * FROM items ORDER BY LENGTH(item_name) ASC; +-----------+ | item_name | +-----------+ | pen | | ruler | | eraser | | pencil | | compass | | scissors | +-----------+ 6 rows in set (0.00 sec)
期待した動作になっていますね!
まとめ
SQLで文字数を取得する関数の使い方について解説しました。
文字数をただ取得するというよりは、条件を指定してソートするといった使われ方が主流です。
ぜひ、この記事を参考に文字数の指定方法をマスターしてください!