今回は、WHERE句の検索条件として既存のカラムの文字数を使用したいときに便利な文字列演算子であるCHAR_LENGTH()についてまとめます。
それでは、CHAR_LENGTH()について確認したいと思います。
CHAR_LENGTH(str)
文字で測定された文字列 str の長さを返します。マルチバイト文字は、単一の文字としてカウントされます。つまり、5 つの 2 バイト文字を含む文字列では、LENGTH() は 10 を返し、CHAR_LENGTH() は 5 を返します。
『MySQL 5.6 リファレンスマニュアル / 関数と演算子 / 文字列関数』
なお、CHAR_LENGTH()のシノニムとして、CHARACTER_LENGTH(str)があります。
CHARACTER_LENGTH(str)
CHARACTER_LENGTH() は CHAR_LENGTH() のシノニムです。
『MySQL 5.6 リファレンスマニュアル / 関数と演算子 / 文字列関数』
それでは、下記にて確認してみます。
mysql> create database hoge;
Query OK, 1 row affected (0.04 sec)
mysql> use hoge;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table hoge(id int, name varchar(10));
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+----------------+
| Tables_in_hoge |
+----------------+
| hoge |
+----------------+
1 row in set (0.00 sec)
mysql> desc hoge;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into hoge(id, name) values(1, '株式会社プラムザ');
Query OK, 1 row affected (0.00 sec)
mysql> select * from hoge;
+------+--------------------------+
| id | name |
+------+--------------------------+
| 1 | 株式会社プラムザ |
+------+--------------------------+
1 row in set (0.00 sec)
mysql> select char_length('株式会社プラムザ');
+-----------------------------------------+
| char_length('株式会社プラムザ') |
+-----------------------------------------+
| 8 |
+-----------------------------------------+
1 row in set (0.00 sec)
mysql> select * from hoge where char_length(name) = 8;
+------+--------------------------+
| id | name |
+------+--------------------------+
| 1 | 株式会社プラムザ |
+------+--------------------------+
1 row in set (0.00 sec)
以上です!
【関連チケット】
『MySQL:条件式に文字数を指定する方法』
『文字列の文字数を調べる (CHAR_LENGTH)』