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

MySQLで空白(空文字列)の列をNULLに更新する方法

データベースを運用していると、「空文字列('')」として登録されてしまったデータを「NULL」に置き換えたいケースによく出会います。NULLと空文字列は似ているようで意味が異なり、検索条件や集計処理に影響を与えるため、統一しておくことが重要です。

この記事では、IF()関数UPDATE文を組み合わせて、空白値の列をNULLに更新する手順を、実際のSQLコードと実行結果付きで解説します。

1. サンプルテーブルを作成する

まず、動作確認用のテーブルを作成します。ここでは氏名を格納するシンプルなテーブルを用意しました。

mysql> create table DemoTable1601
    -> (
    -> FirstName varchar(20),
    -> LastName varchar(20)
    -> );
Query OK, 0 rows affected (0.53 sec)

2. テストデータを挿入する

次に、INSERT文を使ってレコードを挿入します。ポイントは、LastNameに空文字列('')を含むレコードを混ぜておくことです。

mysql> insert into DemoTable1601 values('John','Doe');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1601 values('Adam','');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1601 values('David','Miller');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1601 values('Chris','');
Query OK, 1 row affected (0.11 sec)

SELECT文で全レコードを表示して確認してみましょう。

mysql> select * from DemoTable1601;

実行結果は以下の通りです。AdamとChrisのLastNameには空文字列が入っています。

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      |      Doe |
| Adam      |          |
| David     |   Miller |
| Chris     |          |
+-----------+----------+
4 rows in set (0.00 sec)

3. IF()関数を使って空白値をNULLに更新する

いよいよ本題です。次のUPDATE文を実行すると、空文字列のセルだけがNULLに置き換えられます。

mysql> update DemoTable1601 set LastName=if(LastName='',NULL,LastName);
Query OK, 2 rows affected (0.22 sec)
Rows matched: 4  Changed: 2 Warnings: 0

実行結果を見ると、「Rows matched: 4 / Changed: 2」と表示されています。これは、4件すべての行が条件判定の対象となり、そのうち2件(AdamとChris)だけが実際に更新されたことを意味します。

IF()関数の仕組み

このUPDATE文の核となるのは、次のIF()関数の構文です。

IF(条件式, 条件が真の場合の値, 条件が偽の場合の値)

今回の例では、

  • 条件式: LastName='' (LastNameが空文字列かどうか)
  • 真の場合: NULL を代入
  • 偽の場合: 元の LastName の値をそのまま維持

という動作になります。これにより、既存の有効なデータを壊すことなく、空文字列だけを選択的にNULLへ変換できます。

4. 更新結果を確認する

もう一度SELECT文を実行して、テーブルの状態を確認しましょう。

mysql> select * from DemoTable1601;

実行結果は以下の通りです。AdamとChrisのLastNameがNULLになっているのが分かります。

+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      |      Doe |
| Adam      |     NULL |
| David     |   Miller |
| Chris     |     NULL |
+-----------+----------+
4 rows in set (0.00 sec)

補足:前後に半角スペースが含まれる場合の注意点

もしデータに「' '(半角スペースのみ)」のような値が混在している場合は、TRIM()関数を組み合わせるとより確実です。

update DemoTable1601
set LastName = if(trim(LastName) = '', NULL, LastName);

TRIM()で前後の空白を取り除いてから判定することで、スペースのみの値もNULLに変換できます。

まとめ

MySQLで空白値(空文字列)の列をNULLに更新するには、UPDATE文とIF()関数を組み合わせるのが最もシンプルな方法です。条件式に一致した行だけをNULLに置き換え、それ以外のデータはそのまま保持できるため、本番環境のデータクリーニングにも安心して使えます。必要に応じてTRIM()関数を併用すれば、空白文字を含むデータにも柔軟に対応できます。

  1. MySQLでNULL値を1として表示・更新する方法

    MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを

  2. MySQLで列にENUM型を設定する方法

    ```html MySQLでは、テーブルを作成する際に、あらかじめ決められた文字列のリストから値を選ばせたい列に対してENUM型を設定できます。ENUMは、指定した候補値以外のデータが登録されるのを防ぎたい場合に便利なデータ型です。ここでは、実際にテーブルを作成しながら基本的な使い方を見ていきましょう。ENUM型を含むテーブルを作成するまず、学生の点数と合否ステータスを管理するテーブルを作成します。「StudentStatus」列には「First」「Second」「Fail」の3つの値のみを許可するENUM型を設定しています。mysql> create table DemoTable20