MySQL CONCAT が NULL を含むフィールドに対して NULL を返す: 解決策と代替案
MySQL の CONCAT 関数は、複数のフィールドを 1 つの文字列に連結します。ただし、一部のフィールドに NULL 値が含まれており、式全体が NULL を返す場合には問題が発生する可能性があります。
問題の概要
次のテーブルとクエリについて考えてみましょう。
Table: 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 | Query: SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices
このクエリはデバイス名を次のように返します。
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
解決策: NULL を空の文字列に置き換えます
NULL 値を無視し、代わりに空の文字列を連結するには、COALESCE 関数を使用できます。 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-
以上がフィールドに NULL 値が含まれている場合、MySQL の CONCAT が NULL を返すのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。