MySQLで空白のみの列値を持つレコードを抽出する方法:TRIM()とCOALESCE()の活用
空白(スペース)のみが格納された列値を持つレコードを抽出するには、TRIM()関数を使用します。まずはサンプルとなるテーブルを作成しましょう。
mysql> create table DemoTable826( FirstName varchar(100), Age int);
Query OK, 0 rows affected (0.60 sec)
レコードの挿入
続いて、insertコマンドでレコードを挿入します。ここでは、一部のレコードについてFirstNameに空白のみを設定している点に注目してください。
mysql> insert into DemoTable826 values('Adam',21);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable826 values(' ',24);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable826 values(' ',22);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable826 values('Chris',26);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable826 values('Robert',27);
Query OK, 1 row affected (0.07 sec)テーブルの全レコードを確認する
select文ですべてのレコードを表示してみます。
mysql> select *from DemoTable826 ;
上記のクエリを実行すると、次のような結果が得られます。
+-----------+------+
| FirstName | Age |
+-----------+------+
| Adam | 21 |
| | 24 |
| | 22 |
| Chris | 26 |
| Robert | 27 |
+-----------+------+
5 rows in set (0.00 sec)
空白のみの列値をもつレコードだけを表示するクエリ
FirstName列が空白のみであるレコードだけを表示するには、COALESCE()とTRIM()を組み合わせた条件を指定します。
mysql> select *from DemoTable826 where COALESCE(TRIM(FirstName), '') = '';
実行結果は次のとおりです。
+-----------+------+
| FirstName | Age |
+-----------+------+
| | 24 |
| | 22 |
+-----------+------+
2 rows in set (0.00 sec)
クエリの仕組み
TRIM(FirstName)は、FirstNameの前後にある余白を取り除きます。その結果が空文字列('')と等しければ、元の値が空白のみだったと判断できます。さらにCOALESCE()を組み合わせることで、FirstNameがNULLの場合でも空文字列として扱われ、NULLとの比較によって該当レコードが抽出対象から漏れてしまう問題を防ぐことができます。
-
MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方
MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829 ( Name varchar(
-
MySQLでIN句に指定した値のみを任意の順序で表示する方法
MySQLでIN句に指定した値のみを任意の順序で表示する方法MySQLでは、IN()とORDER BY句、さらにFIELD()関数を組み合わせることで、IN句内に指定した値だけを、希望する独自の順序で表示できます。通常のORDER BYは昇順・降順のソートしかできませんが、FIELD()関数を使えば自由に並び順を定義できるのがポイントです。サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。mysql> create table DemoTable1986(Number int);Query OK, 0 rows affected (0.00 sec)次に、INSERTコマ