sql >> データベース >  >> RDS >> Sqlserver

SQLServerで文字列値とNULL値を連結する方法

    問題:

    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;
    

    結果は次のとおりです。

    リンダジャクソン MaryAliceThomson
    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
    リンダジャクソン
    メアリー・アリス・トムソン
    スティーブン
    ブラウン

    このクエリは、不要なスペースなしで子供のフルネームを表示します。


    1. リレーノードを使用したMySQLGaleraクラスターによるダウンタイムゼロのネットワーク移行

    2. SQLiteは14のエラーコードを返しました

    3. SQL Serverでのテーブルパーティションの切り替え:ウォークスルー

    4. Djangoで同等のGROUP_CONCAT