2012-05-11 18 views
84

SQL Server 2008 R2でCONCAT関数を探していました。 I found the link for this function。私はこの機能を使用する場合でも、それは次のエラーを与える:SQL Server 2008 R2でCONCAT関数を使用するにはどうすればよいですか?

Msg 195, Level 15, State 10, Line 7
'CONCAT' is not a recognized built-in function name.

CONCAT機能は、SQL Server 2008 R2に存在していますか?

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

+0

@Oded stmt-select concat( 'b'、 'a')を実行しようとしています。 –

+0

@marc_s:ドキュメントにはSQL Server 2012用の表示がありますが、「CONCAT」 2012年の* new *です。 – Gabe

+1

間接的に2012年のものであることを示していますが、そのページはUIデザインが貧弱です。古いバージョンで利用できる機能があるページには、読んでいるドキュメントのバージョンのすぐ隣にドロップダウンがあります。あなたがこれを知っているなら、あなたはそれが2012年だけであることを知っています。あなたがそれを知らなかったら、あなたはMiteshと同じ状況になります。 – John

答えて

61

CONCATは、SQL Server 2012に新しく追加されました。これは明らかに、の以前のバージョン(2008 R2を含む)の機能ではありません。これは、SQL Server 2012の一部であることを

は、ドキュメントツリーで見ることができます:マーティン・スミスが親切というSQL Server provides an implementation of ODBC's CONCAT functionを指摘

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。

+21

以前のバージョンでは 'SELECT {fn concat( 'foo'、 'bar')};を使うことができます。しかし、2つのパラメータだけを受け入れる。 –

+5

また、 '+'演算子を@ lynn-langitという言葉で使っているだけですが、最初は完全に逃しました... – Svish

+3

@Svish '+'は、 'SELECT 'A' + 'B' + 'C' '対 'SELECT CONCAT(' A '、' B '、' C ')' ABC、ABC、NULL、AB) –

92

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

サンプルコードでMSDN referenceを見てください。 SQL 2012からは、新しいCONCAT functionを使用することをお勧めします。

21

説明したように、CONCATはSQL Server 2012より前ではサポートされていませんが、+演算子を使用して簡単に連結できます。しかし、このオペレータは、追加して連結しないと考えているので、最初のオペランドが数字である場合、エラーをスローします。この問題を解決するには、 ''を前に追加してください。たとえば、

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

エラーが発生します.BUT '' + someNumber + 'someString' + ......は正常に動作します。また

、あなたは 'それらの間を追加することを確認し、連結される2つの数字がある場合は、その

.... + someNumber + '' + someOtherNumber + ..... 
+0

ありがとう、 '' + f.columnName + ''を列のリストの中で使うと扱いが効きます! – Luke

+2

@kuklei私のSQLサーバでは、 'SELECT' varchar( '+ 5 +') 'がエラーをスローする "varchar('データ型intに変換するときに変換に失敗しました。保持する。 – Alexander

34

のように私はあなたがそれらを

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

をCONCAT前に、あなたはすべての列をキャスト示唆これはあなたのために働くはずです。

+2

ヒント:varcharのサイズが指定されていない場合(例:varchar(50))、sqlはデフォルトの30を使用することに注意する価値がある。キャストされる変数/値がデフォルトよりも大きければ、エラー。 – Swifty

2
(city + ', ' + state + ' ' + zip) as ctstzip for select 
(city + ', ' + state + ' ' + zip) for insert 

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

挿入時に、値を挿入する必要がある正しい位置にある必要があります。 "as"を使用するとエラーが発生します。

すなわち

​​
1

SQL Server 2012のCONCAT関数の代替近似におけるNULL安全ドロップ

SQL Server 2012の

SELECT CONCAT(data1, data2)

PRE SQL 2012(二ソリューションズ)

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

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

これら二つの解決策は@Martinスミス、@Svishとの@ vasin1987を含む他のポスターが提起したいくつかの優れた回答や注意事項を照合。特定のオペランドに関連+オペレータの様々な行動を考慮しながら

これらのオプションは、安全な取り扱いのためNULLNULL''に(空の文字列)キャストを追加します。 +オペレータのアプローチは、必要に応じて多くの引数にスケーラブルであるのに対して、ODBC Scaler Functionソリューションは2つの引数に制限されています。

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

関連する問題