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

MySQLのCONCAT()関数にNULL値を含む列名を渡した場合、返される結果はどうなる?

MySQLのCONCAT()関数は、引数のうちひとつでもNULLが含まれている場合、結果として必ずNULLを返します。これは重要な仕様であり、CONCAT()関数の引数のひとつとしてNULL値を含む列名を渡した場合も、MySQLは連結結果ではなくNULLを返します。

以下では、「Student」テーブルを使った具体例でこの動作を確認してみましょう。

実行例

次の例では、「Name」列と「Address」列の値を文字列「Resident of」とともに連結しています。しかし5行目のYashrajさんのレコードでは、「Address」列の値がNULLであるため、連結結果全体もNULLになっている点に注目してください。

mysql> Select Name, Address, CONCAT(Name,' Resident of ',Address)AS 'Detail of Student' from Student;

+---------+---------+---------------------------+
| Name    | Address | Detail of Student         |
+---------+---------+---------------------------+
| Gaurav  | Delhi   | Gaurav Resident of Delhi  |
| Aarav   | Mumbai  | Aarav Resident of Mumbai  |
| Harshit | Delhi   | Harshit Resident of Delhi |
| Gaurav  | Jaipur  | Gaurav Resident of Jaipur |
| Yashraj | NULL    | NULL                      |
+---------+---------+---------------------------+

5 rows in set (0.00 sec)

NULLによる連結失敗を回避するには

列にNULLが含まれる可能性がある場合でも連結結果を取得したいときは、IFNULL()関数やCOALESCE()関数を組み合わせて、NULLを別の値(例えば空文字列やデフォルトの文言)に置き換えるのが有効です。

mysql> Select Name, Address,
       CONCAT(Name,' Resident of ', IFNULL(Address,'住所未登録')) AS 'Detail of Student'
       from Student;

このように書き換えることで、AddressがNULLのレコードでも「Yashraj Resident of 住所未登録」のように、意図した連結結果を得られるようになります。データにNULLが混在する可能性があるテーブルを扱う際は、この挙動をあらかじめ理解しておくことが大切です。

  1. MySQLのCONCAT関数を使って列の既存値に文字列を追加する方法

    MySQLでは、CONCAT関数とUPDATE文を組み合わせることで、列に格納されている既存の値を上書きせずに、新しい文字列を末尾へ追記できます。この記事では、実際にサンプルテーブルを作成しながら、その手順をわかりやすく解説します。 1. デモ用テーブルを作成する まず、動作を確認するためのサンプルテーブルを作成しましょう。 mysql> create table addToExistingValueDemo -> ( -> Instructor_Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> In

  2. MySQLでテーブルのカラム名(列名)を確認する方法|SHOW COLUMNSとinformation_schemaの使い方

    MySQLでテーブルに含まれるカラム名(列名)を調べたい場合、SHOW COLUMNS文またはINFORMATION_SCHEMA.COLUMNSテーブルを使用する方法が一般的です。この記事では、両方の方法をサンプルコードとともにわかりやすく解説します。検証用テーブルの作成まず、動作確認用として以下のようなサンプルテーブルを作成します。mysql> create table DemoTable603 ( ClientId int NOT NULL AUTO_INCREMENT, ClientName varchar(100), Clien