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