MySQL CONCAT での NULL 処理
MySQL CONCAT 関数を使用する場合は、NULL 値の影響を考慮することが重要です。連結に含まれるフィールドのいずれかに NULL が含まれている場合、結果全体も NULL になります。これにより、クエリやレポートで予期しない結果が生じる可能性があります。
シナリオ:
次のデータを含む「devices」という名前のテーブルについて考えます:
affiliate_name | affiliate_location | model | ip | os_type | os_version |
---|---|---|---|---|---|
cs1 | inter | Dell | 10.125.103.25 | Linux | Fedora |
cs2 | inter | Dell | 10.125.103.26 | Linux | Fedora |
cs3 | inter | Dell | 10.125.103.27 | NULL | NULL |
cs4 | inter | Dell | 10.125.103.28 | NULL | NULL |
問題:
次のクエリの目的複数のフィールドの値を連結して「device_name」を作成するには:
SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices;
ただし、行 3 と行 4 に NULL 値があるため、結果にはこれらの行の NULL が含まれます:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
解決策:
この問題を解決するには、次のようにします。 COALESCE 関数を使用して、CONCAT を使用する前に NULL 値を空の文字列に変換します。 COALESCE 関数は複数の引数を受け取り、リスト内の最初の非 NULL 値を返します:
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices;
この更新されたクエリの結果は、目的の出力になります:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-
以上がMySQL CONCAT 関数で NULL 値を処理する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。