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