109

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

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

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

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

4

8 に答える 8

106

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

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

于 2012-06-17T19:23:52.187 に答える
70

CONCATはSQL Server 2012の新機能です。あなたが提供したリンクはこれを明確にしています.2008 R2を含む以前のバージョンの機能ではありません.

これが 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)  

EDIT Martin Smithは、SQL Server が ODBC のCONCAT機能の実装を提供していることを有益に指摘しています。

于 2012-05-11T11:19:24.813 に答える
50

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

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

これはうまくいくはずです。

于 2014-02-11T13:08:36.260 に答える
23

CONCAT, as statement, is not supported before SQL Server 2012. ただし、提案されているように + 演算子を使用するだけで連結できます。ただし、最初のオペランドが数値の場合、この演算子はエラーをスローすることに注意してください。これは、加算ではなく連結であると見なされるためです。この問題を解決するには、先頭に '' を追加します。例えば

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

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

また、連結する数字が 2 つある場合は、数字の間に「」を追加してください。

.... + someNumber + '' + someOtherNumber + .....
于 2013-04-08T04:29:40.743 に答える
8

SQL Server 2012 CONCAT 関数の置換近似での NULL セーフ ドロップ

SQL サーバー 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 スケーラー関数ソリューションは引数が 2 つに制限されているのに対し、+演算子のアプローチは必要に応じて多くの引数に拡張できることに注意してください。

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

于 2017-11-21T21:48:00.100 に答える
3
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert

Only cast or convert if any field type is different from others.

On insert the value needs to be in the correct spot you need it be inserted. Using "as" will give you an error.

i.e.

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))
于 2016-08-25T17:50:28.360 に答える