CONCAT
SQL Server 2008 R2 で関数を探していました。この機能のリンクを見つけました。しかし、この関数を使用すると、次のエラーが発生します。
メッセージ 195、レベル 15、状態 10、行 7
「CONCAT」は認識される組み込み関数名ではありません。
CONCAT
関数は SQL Server 2008 R2 に存在しますか?
そうでない場合、SQL Server 2008 R2 で文字列を連結するにはどうすればよいですか?
CONCAT
SQL Server 2008 R2 で関数を探していました。この機能のリンクを見つけました。しかし、この関数を使用すると、次のエラーが発生します。
メッセージ 195、レベル 15、状態 10、行 7
「CONCAT」は認識される組み込み関数名ではありません。
CONCAT
関数は SQL Server 2008 R2 に存在しますか?
そうでない場合、SQL Server 2008 R2 で文字列を連結するにはどうすればよいですか?
完全を期すために、SQL 2008 ではプラス+
演算子を使用して文字列連結を実行します。
サンプル コードを含むMSDN リファレンスを参照してください。SQL 2012 以降では、新しいCONCAT 関数を使用できます。
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
機能の実装を提供していることを有益に指摘しています。
連結する前にすべての列をキャストすることをお勧めします
cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
これはうまくいくはずです。
CONCAT, as statement, is not supported before SQL Server 2012. ただし、提案されているように + 演算子を使用するだけで連結できます。ただし、最初のオペランドが数値の場合、この演算子はエラーをスローすることに注意してください。これは、加算ではなく連結であると見なされるためです。この問題を解決するには、先頭に '' を追加します。例えば
someNumber + 'someString' + .... + lastVariableToConcatenate
エラーが発生しますが、'' + someNumber + 'someString' + ......
問題なく動作します。
また、連結する数字が 2 つある場合は、数字の間に「」を追加してください。
.... + someNumber + '' + someOtherNumber + .....
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)
。
(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))