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

SQLServerで文字列と数値を連結する6つの方法

    SQL Serverの使用中に文字列と数値を連結しようとしたがエラーが発生した場合は、この記事で問題が解決するはずです。 SQL ServerでT-SQLを使用して連結を実行する方法は複数あり、さまざまなデータ型(文字列や数値など)を連結している場合、連結の方法によってはエラーが発生する可能性があります。

    異なるデータ型を連結するときに覚えておくべきことは、最初にそれらを同じデータ型に変換する必要があるということです。より具体的には、文字列を数値と連結する場合、数値を文字列と連結する前に、数値を文字列に変換する必要があります。幸い、SQL Server/T-SQLはこれを簡単にします。

    この記事では、T-SQLを使用して文字列と数値を連結する6つの方法を紹介します。

    CONCAT()関数

    文字列と数値を連結する最も明白な(そしておそらく最良の)方法は、CONCAT()を使用することです。 働き。これにより、文字列と数値を2つの別個の引数として指定できます。 SQL Serverがそれらを連結し、連結が完了します。

    SELECT CONCAT('Comments: ', 9) AS Result;

    結果:

    Result     
    -----------
    Comments: 9

    ご覧のとおり、これは完全に機能します。文字列と数字は1つのフィールドとして表示されます。

    CONCAT()は、1つの文字列と1つの数値だけに限定されないことに注意してください。 関数は最大254個の引数を受け入れることができます(つまり、最大254個の文字列/数値を結合できます。

    CONCAT()にも注意してください 連結する前に、すべての引数を暗黙的に文字列型に変換します。また、CONCAT() null値を暗黙的に空の文字列に変換します。

    CONCAT_WS()関数

    CONCAT_WS()を使用すると、前の例をさらに一歩進めることができます。 働き。この関数を使用すると、区切り文字を指定できます。

    セパレータを提供するには、それを最初の引数として追加するだけです。次に、文字列と数値を2番目と3番目の引数として指定します。

    SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;

    結果:

    Result     
    -----------
    Comments: 9

    この関数は、連結される個々のアイテムの間にセパレーターが追加されるため、名前と値のペアの分離には必ずしも適していません(したがって、複数のペアがある場合は、各ペアの間にセパレーターも追加されます)。この場合、連結する名前と値のペアが1つしかないため、正常に機能します。

    ただし、いつでも複数のCONCAT_WS()をネストできます。 ニーズに合った正しい連結を返す関数(ペアごとに異なるセパレータを使用できるようにするため)。

    CONVERT()関数

    何らかの理由でCONCAT()を使用できない(または使用したくない)場合 またはCONCAT_WS() 関数の場合、文字列連結演算子(+)を使用して連結を実行できます。 )。この方法を使用する場合は、データ型の変換を手動で実行する必要があります。

    データ型を変換する1つの方法は、CONVERT()を使用することです。 機能。

    前の例と同じデータを使用してこれを行う方法は次のとおりです。

    SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;

    結果:

    Result     
    -----------
    Comments: 9

    この場合、整数をvarchar(12)に変換しますが、これは必要な任意のデータ型と長さにすることができます。

    CAST()関数

    CAST() 関数はCONVERT()と非常によく似ています 働き。主な違いは、CAST() 標準のANSIおよびCONVERT()です。 T-SQLに固有です。そうは言っても、CONVERT() いくつかの追加機能がありますが、これらの例では、どちらかを使用できます。

    これがCAST()です 前の例と同じデータを使用したバージョン:

    SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

    結果:

    Result     
    -----------
    Comments: 9

    TRY_CONVERT()関数

    CONVERT()を使用する際の潜在的な問題の1つ 関数は、変換が成功しない場合、エラーが発生することです。多くの場合これで問題ありませんが、望ましくない場合もあります。このような場合、TRY_CONVERT()が見つかる可能性があります より適切です。

    TRY_CONVERT() 関数は、CONVERT()と同じようにデータ型を変換します 関数は行います。ただし、データを変換できない場合は、nullが返されます。 。

    たとえば、次のことを実行しようとすると、エラーが発生します。

    SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;

    結果:

    Error: Arithmetic overflow error converting numeric to data type varchar.

    ただし、TRY_CONVERT()を使用する場合 、nullを取得します :

    SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;

    結果:

    Result
    ------
    null

    この場合、条件付きプログラミングを使用して、結果に応じて異なるタスクを実行できます。

    TRY_CAST()関数

    TRY_CAST() 関数は同じように機能します。 CAST()と同じようにデータ型を変換します 関数はこれを行い、データを変換できない場合は、nullを返します。 。

    たとえば、これはエラーをスローします:

    SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

    結果:

    Error: Arithmetic overflow error converting numeric to data type varchar.

    ただし、TRY_CAST()を使用する場合 代わりに、nullを取得します :

    SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

    結果:

    Result
    ------
    null

    1. 他の2つのVarchar列の連結を表す列を追加します

    2. SQL Server 2019の最初のパブリックプレビュー:CTP 2.0

    3. SQLServerでの特定のログインに対する同時ユーザーセッションの制限

    4. MariaDB BENCHMARK()の説明