MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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との比較によって該当レコードが抽出対象から漏れてしまう問題を防ぐことができます。


  1. MySQLで列の値ごとに「NO」の件数のみをカウントして返すクエリの書き方

    MySQLでは、SUM()関数と条件式を組み合わせることで、グループごとに特定の値(この例では「NO」)が出現した回数だけをカウントできます。ここでは、ENUM型のカラムを持つテーブルを例に、「NO」の件数のみを集計する方法を具体的な手順とともに解説します。 1. テーブルを作成する まず、サンプル用のテーブルを作成します。isTopperカラムはENUM型で、「YES」または「NO」のいずれかの値を持ちます。 mysql> create table DemoTable1829      (      Name varchar(

  2. 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コマ