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

SQL Serverで連結文字列にセパレータを追加する方法– CONCAT_WS()

    SQL ServerとAzureでは、2つ以上の文字列を連結する必要がある場合は、T-SQL CONCAT()を使用できます。 働き。他の基本的な連結操作と同様に、この関数は文字列をエンドツーエンドで結合します。

    しかし、各文字列の間に区切り文字を追加する必要がある場合はどうなりますか?

    たとえば、文字列のコンマ区切りリストを作成したい場合があります。この場合、各文字列の間にカンマを挿入する必要があります。このように:

    Paris, France
    

    これの代わりに:

    ParisFrance
    

    幸い、T-SQLはCONCAT_WS()を提供します あなたがまさにそれをするのを助ける関数。 CONCAT_WS() 関数はCONCAT()と同じように機能します 関数。ただし、追加の引数(使用するセパレーター)が必要です。

    次に例を示します:

    SELECT CONCAT_WS(',','Paris', 'France') AS Location;
    

    結果:

    Location    
    ------------
    Paris,France
    

    必要に応じて、そこにスペースを追加できます:

    SELECT CONCAT_WS(',','Paris', 'France') AS Location;
    

    結果:

    Location     
    -------------
    Paris, France
    

    セパレーター

    区切り文字はカンマでなければならないことは言うまでもありません。区切り文字は、任意の文字タイプの式にすることができます(charncharnvarchar 、またはvarchar

    これは前の例と同じですが、これは別のセパレータを使用している点が異なります。

    SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
    

    結果:

    Location      
    --------------
    Paris - France
    

    データベースの例

    データベースからデータを取得し、2つの列をコンマで区切って1つに結合する例を次に示します。

    SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location
    FROM city
    INNER JOIN country ON
    city.CountryCode = country.Code
    WHERE country.Code = 'THA';
    

    結果:

    Location                   
    ---------------------------
    Bangkok, Thailand          
    Nonthaburi, Thailand       
    Nakhon Ratchasima, Thailand
    Chiang Mai, Thailand       
    Udon Thani, Thailand       
    Hat Yai, Thailand          
    Khon Kaen, Thailand        
    Pak Kret, Thailand         
    Nakhon Sawan, Thailand     
    Ubon Ratchathani, Thailand 
    Songkhla, Thailand         
    Nakhon Pathom, Thailand
    

    NULL値

    引数のいずれかがNULLの場合 値の場合、SQL Serverはその値とその区切り文字をスキップしますが、それでも他の値を処理します。

    例:

    SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
    

    結果:

    Location     
    -------------
    Paris, France
    

    NULL値セパレーター

    セパレータ自体がNULLの場合 値の場合、連結操作は引き続き実行されますが、区切り文字はありません。

    例:

    SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
    

    結果:

    Location   
    -----------
    ParisFrance
    

    これは、T-SQLとMySQLの違いの1つです(MySQLにはCONCAT_WS()もあります 働き)。 MySQLでは、セパレータがNULLの場合 値の場合、連結の結果はNULLになります 値。


    1. SQL文字列でのアンパサンド文字のエスケープ

    2. Microsoft SQL Serverへのログインエラー:18456

    3. UPPER()–PostgreSQLで大文字に変換

    4. PSQLのDECIMALデータ型とNUMERICデータ型の違い