MySQLで特定のカラムの文字数が5文字未満の行を取得する方法
MySQLであるフィールド(カラム)の値が5文字未満の行だけを抽出したい場合、LENGTH()関数を使用します。LENGTH()関数は文字列の長さをバイト数で返すため、WHERE句と組み合わせることで、指定した文字数より短いレコードを簡単に絞り込むことができます。
基本構文
SELECT * FROM テーブル名 WHERE LENGTH(カラム名) < 5;
サンプルテーブルの作成
それでは、実際に動きを確認するためにテーブルを作成してみましょう。以下のクエリで「fieldLessThan5Chars」というテーブルを作成します。
mysql> create table fieldLessThan5Chars -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> yourZipCode varchar(10) -> ); Query OK, 0 rows affected (0.52 sec)
このテーブルは、Id(自動採番の主キー)と、郵便番号を想定したyourZipCode(varchar型・最大10文字)の2つのカラムを持っています。
テストデータの挿入
次に、INSERTコマンドを使っていくつかのレコードを挿入します。意図的に5文字未満のデータも含めています。
mysql> insert into fieldLessThan5Chars(yourZipCode) values('35801');
Query OK, 1 row affected (0.10 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('3580');
Query OK, 1 row affected (0.20 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('90001');
Query OK, 1 row affected (0.40 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('100');
Query OK, 1 row affected (0.20 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('10');
Query OK, 1 row affected (0.17 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('0');
Query OK, 1 row affected (0.15 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('90209');
Query OK, 1 row affected (0.11 sec)
mysql> insert into fieldLessThan5Chars(yourZipCode) values('33124');
Query OK, 1 row affected (0.20 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select *from fieldLessThan5Chars;
実行結果は以下の通りです。
+----+-------------+ | Id | yourZipCode | +----+-------------+ | 1 | 35801 | | 2 | 3580 | | 3 | 90001 | | 4 | 100 | | 5 | 10 | | 6 | 0 | | 7 | 90209 | | 8 | 33124 | +----+-------------+ 8 rows in set (0.00 sec)
5文字未満の行を取得するクエリ
ここからが本題です。yourZipCodeカラムの値が5文字未満の行のみを取得するには、次のようにLENGTH()関数を条件に指定します。
mysql> select *from fieldLessThan5Chars where length(yourZipCode) < 5;
実行結果
+----+-------------+ | Id | yourZipCode | +----+-------------+ | 2 | 3580 | | 4 | 100 | | 5 | 10 | | 6 | 0 | +----+-------------+ 4 rows in set (0.00 sec)
ご覧のとおり、「3580」「100」「10」「0」のように、5文字に満たない郵便番号を持つ4件のレコードだけが抽出されました。5文字ちょうどの「35801」「90001」「90209」「33124」は除外されています。
補足:CHAR_LENGTH()との違い
なお、マルチバイト文字(日本語など)を扱う場合は注意が必要です。LENGTH()はバイト数を返すのに対し、CHAR_LENGTH()は文字数を返します。UTF-8環境では日本語1文字が3バイトになるため、日本語データに対して正確な文字数で判定したい場合は、CHAR_LENGTH()を使用することをおすすめします。
-
MySQLでフィールド値に含まれるカンマの数をカウントする方法
MySQLでフィールド値に含まれるカンマの数をカウントする方法カンマ区切りで保存されたデータから、カンマがいくつ含まれているかを調べたいケースは意外と多くあります。MySQLではLENGTH()関数とREPLACE()関数を組み合わせることで、シンプルなクエリひとつでカンマの個数をカウントできます。基本構文以下がカンマをカウントするための基本構文です。select length(対象カラム名) - length(replace(対象カラム名, ,, )) as エイリアス名 from テーブル名;このクエリの仕組みは非常にシンプルです。元の文字列の長さから、カンマをすべて削除した文字列の長さを
-
MySQLで最大の累積値とその出現回数を取得するクエリの書き方
カラム同士を掛け合わせた値(累積値)の中から最大値と、その出現回数を取得したい場合は、集計関数 COUNT(*) をサブクエリと組み合わせて使用します。あわせて GROUP BY 句も活用します。テーブルの作成まず、以下のコマンドでテーブルを作成しましょう。mysql> create table demo23-> (-> id int not null auto_increment primary key,-> value1 int,-> value2 int-> );Query OK, 0 rows affected (1.65 sec)レコードの挿入続い