web-dev-qa-db-ja.com

SQL Server 2008 R2でCONCAT関数を使用するにはどうすればよいですか?

SQL Server 2008 R2でCONCAT関数を探していました。 I この関数のリンクが見つかりました 。しかし、この関数を使用すると、次のエラーが発生します。

メッセージ195、レベル15、状態10、行7
'CONCAT'は認識される組み込み関数名ではありません。

CONCAT関数はSQL Server 2008 R2に存在しますか?

そうでない場合、SQL Server 2008 R2で文字列を連結するにはどうすればよいですか?

91

CONCATはSQL Server 2012の新機能です。指定したリンクはこれを明確にします。2008R2を含むPrevious Versionsの関数ではありません。

SQL Server 2012の一部であることは、ドキュメントツリーで確認できます。

SQL Server 2012  
Product Documentation  
Books Online for SQL Server 2012  
Database Engine  
  Transact-SQL Reference (Database Engine)  
    Built-in Functions (Transact-SQL)  
      String Functions (Transact-SQL)  

EDITMartin Smithは、 SQL ServerがODBCのCONCAT関数の実装を提供する を有益に指摘しています。

62
ta.speot.is

完全を期すために-SQL 2008では、プラスの+演算子を使用して文字列の連結を実行します。

サンプルコードで MSDNリファレンス をご覧ください。 SQL 2012以降では、新しい CONCAT関数 を使用できます。

97
Lynn Langit

連結する前にすべての列をキャストすることをお勧めします

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

これはあなたのために働くはずです。

40
vasin1987

前述のように、CONCATはSQL Server 2012より前ではサポートされていません。ただし、提案されているように、+演算子を使用して単純に連結できます。ただし、この演算子は、第1オペランドが数値である場合、連結ではなく加算であると考えられるため、エラーをスローすることに注意してください。この問題を解決するには、先頭に ''を追加します。例えば

someNumber + 'someString' + .... + lastVariableToConcatenate

エラーが発生しますが、'' + someNumber + 'someString' + ......は問題なく動作します。

また、連結する数値が2つある場合は、次のようにそれらの間に ''を追加してください。

.... + someNumber + '' + someOtherNumber + .....
23
kuklei

SQL Server 2012 CONCAT関数の置換近似のNULL安全ドロップ

SQL Server 2012

SELECT CONCAT(data1, data2)

PRE SQL 2012(2つのソリューション)

SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}

SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')

これらの2つのソリューションは、@ Martin Smith、@ Svish、@ vasin1987などの他のポスターによって提起されたいくつかの優れた回答と警告を照合します。

これらのオプションは、特定のオペランドに関連する''演算子のさまざまな動作を考慮しながら、NULL+(空の文字列)に追加して安全なNULL処理をキャストします。

ODBC Scaler Function ソリューションは2つの引数に制限されていますが、+ operatorアプローチは必要に応じて多くの引数に拡張可能です。

ここでvarchar(MAX)によって修正されたデフォルトのvarcharサイズに関して@Swiftyによって識別される潜在的な問題にも注意してください。

4
Troy Sheaffer
(city + ', ' + state + ' ' + Zip) as ctstzip for select
(city + ', ' + state + ' ' + Zip) for insert

いずれかのフィールドタイプが他のフィールドタイプと異なる場合のみ、キャストまたは変換します。

挿入時には、値を挿入するのに必要な正しい場所にある必要があります。 「as」を使用するとエラーが発生します。

つまり.

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + Zip))
3
Antonio Perez