MySQLで空白のカラム値をNULLとして扱う方法
MySQLでは、空文字列('')や空白だけが入力されたデータはNULLとは異なる値として保存されます。そのため、データの整合性を保つために、空白のフィールドをNULLに置き換えたいケースはよくあります。本記事では、実際のサンプルを使いながら、空白のカラム値をNULLとして更新する方法を解説します。
1. サンプルテーブルの作成
まず、テーブルを作成しましょう。
mysql> create table DemoTable1362
-> (
-> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName varchar(40)
-> );
Query OK, 0 rows affected (0.67 sec)
ClientIdを主キー(AUTO_INCREMENT)とし、ClientNameには空白やNULLが混在するデータを格納できる構造にしています。
2. テストデータの挿入
次に、INSERT文を使って通常の文字列・空白・NULLなど、さまざまな状態のレコードを挿入します。
mysql> insert into DemoTable1362(ClientName) values('Chris');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1362(ClientName) values(' ');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1362(ClientName) values('Bob');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1362(ClientName) values(' ');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1362(ClientName) values('David');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1362(ClientName) values(NULL);
Query OK, 1 row affected (0.07 sec)
3. 挿入したデータの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1362;
実行結果は以下のとおりです。
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 1 | Chris | | 2 | | | 3 | Bob | | 4 | | | 5 | David | | 6 | NULL | +----------+------------+ 6 rows in set (0.00 sec)
このように、ClientIdが「2」と「4」の行には空文字列('')が格納されており、「6」の行には明示的にNULLが入っています。見た目上はどちらも空欄に見えますが、内部的には別の値として扱われている点に注意してください。
4. 空白のフィールドをNULLへ更新する
ここからが本題です。UPDATE文とWHERE句を組み合わせることで、空白のフィールドをNULLに一括変換できます。
mysql> update DemoTable1362
-> set ClientName=NULL
-> where ClientName='' or length(ClientName)=0;
Query OK, 2 rows affected (0.21 sec)
Rows matched: 2 Changed: 2 Warnings: 0
ポイント:
ClientName=''… 空文字列に一致する行を対象にします。length(ClientName)=0… 文字数が0バイト(または0文字)のデータも確実に拾います。- OR条件で組み合わせることで、空白・空文字列の両方を漏れなくNULL化できます。
5. 更新結果の確認
再度テーブルの中身を確認してみましょう。
mysql> select * from DemoTable1362;
実行結果は以下のとおりです。
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 1 | Chris | | 2 | NULL | | 3 | Bob | | 4 | NULL | | 5 | David | | 6 | NULL | +----------+------------+ 6 rows in set (0.00 sec)
ClientIdが「2」と「4」のClientNameがNULLに更新されました。これで、空文字列とNULLが統一され、IS NULLを使った検索や集計が正しく行えるようになります。
補足:NULLIF関数を使った代替方法
SELECT時にのみ空白をNULLとして表示したい場合は、UPDATEせずにNULLIF関数を利用する方法もあります。
mysql> select ClientId, NULLIF(TRIM(ClientName), '') AS ClientName from DemoTable1362;
TRIMで前後の空白を除去し、結果が空文字列ならNULLに変換できます。元データを変更したくない場合に便利です。
まとめ
MySQLにおいて、空文字列('')とNULLは別物です。UPDATE文でwhere カラム名='' or length(カラム名)=0という条件を使えば、既存データの空白をNULLへまとめて置き換えられます。また、参照時だけNULLとして扱いたい場合はNULLIF関数が有効です。用途に応じて使い分けると、データ管理がより正確になります。
-
MySQLで空白(空文字列)の列をNULLに更新する方法
データベースを運用していると、「空文字列()」として登録されてしまったデータを「NULL」に置き換えたいケースによく出会います。NULLと空文字列は似ているようで意味が異なり、検索条件や集計処理に影響を与えるため、統一しておくことが重要です。この記事では、IF()関数とUPDATE文を組み合わせて、空白値の列をNULLに更新する手順を、実際のSQLコードと実行結果付きで解説します。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成します。ここでは氏名を格納するシンプルなテーブルを用意しました。mysql> create table DemoTable1601 -&g
-
MySQLでNULLを含む列の乗算を処理する方法|COALESCE関数の使い方
MySQLでNULLを含む列の乗算を正しく計算するにはMySQLでは、数値型の列にNULLが含まれている場合、そのまま乗算すると結果もNULLになってしまいます。このような問題を回避するには、COALESCE() 関数を利用するのが効果的です。COALESCE()は、引数の中から最初に見つかった非NULLの値を返す関数で、NULLを別の値(ここでは「1」)に置き換えて計算できます。以下、実際の手順を見ていきましょう。1. サンプルテーブルを作成するまず、商品点数と金額を格納するテーブルを作成します。mysql> create table DemoTable1842 &nbs