問題:
NULLをSQLServerの別の列の文字列値と連結する必要があります。
例:
私たちのデータベースには、children
次の列にデータがあります: id (主キー)、 first_name 、ミドルネーム 、および last_name 。
id | first_name | ミドルネーム | last_name |
---|---|---|---|
1 | リンダ | NULL | ジャクソン |
2 | メアリー | アリス | トムソン |
3 | NULL | スティーブン | NULL |
4 | NULL | NULL | ブラウン |
列の1つにNULLが格納されている場合でも、1つの列の名、次の列のミドルネーム、および最後の列の名前を1つの文字列として表示します。
ソリューション2:
CONCAT()
を使用します 働き。作成するクエリは次のとおりです。
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
結果は次のとおりです。
name |
---|
スティーブン |
ブラウン |
ディスカッション:
CONCAT()
を使用します NULLを含む式または列からの文字列値を連結する関数。この関数は、文字列(またはNULL)のリストを取得し、これらすべての値を1つの文字列に表示します。値の間に区切り文字がないため、結果(この例のように)が期待どおりにフォーマットされない場合があります。どうすればこれを修正できますか?別のCONCAT()
を見てください クエリ:
ソリューション2:
別のクエリオプションは次のとおりです:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
結果は次のとおりです。
name |
---|
リンダジャクソン |
メアリー・アリス・トムソン |
現在、文字列値とは別に、この関数は(連結された値の間に配置された)いくつかのスペースも取ります。これにより、名前の一部が別の部分から分離されます。しかし、ご覧のとおり、このソリューションも理想的ではありません。ミドルネームのないフルネームには余分なスペースがありますが、名前が1つしかないレコードには2つの余分なスペースがあります。
この場合、CONCAT_WS()
関数がより良い解決策です。
ソリューション3:
CONCAT_WS()
関数は、追加の最初の引数を取ります。文字列間の区切り文字として機能する文字です。クエリは次のとおりです:
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
そしてその結果:
name |
---|
リンダジャクソン |
メアリー・アリス・トムソン |
スティーブン |
ブラウン |
このクエリは、不要なスペースなしで子供のフルネームを表示します。