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


102

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

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

CONCAT関数は、SQL Server 2008 R2で存在していますか?

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


@Oded私はただstmtを実行しようとする-select concat( 'b'、 'a')
Mitesh Budhabhatti

1
@marc_s:ドキュメントには、それはSQL Server 2012のためだという何らかの指示を持っていますが、兆候がないCONCATです新しい 2012年のためには
ゲイブ

1
それは2012年版であることを間接的に示していますが、ページはUIデザインが貧弱です。以前のバージョンで機能が利用できるページでは、読んでいるドキュメントのバージョンのすぐ隣にドロップダウンがあります。これを知っていれば、それは2012年のみであることを知っています。あなたがそれを知らなかったなら、あなたはミテッシュと同じ状況になってしまいます。
ジョン14

回答:


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機能の実装を提供することを有益に指摘しています


26
SELECT {fn concat ('foo', 'bar')};以前のバージョンで使用できます。ただし、2つのパラメーターのみを受け入れます。
マーティン・スミス

6
または+、@ lynn-langitが彼女の回答で言及しているように、演算子を使用します。これは、受け入れられた回答しか読んでいないため、最初はまったく見落としました...
Svish

7
@Svish +異なる振る舞い、の結果SELECT 'A' + 'B' + 'C'SELECT CONCAT('A', 'B', 'C')SELECT 'A' + 'B' + NULLSELECT CONCAT('A', 'B', NULL)しているABCABCNULLAB
ta.speot.is

@ ta.speot.is知っておきたい!私の場合、のケースはありませんでしたがNULL+うまく
いきました

この回答は、代わりにプラス記号を使用する必要があるという情報が含まれている場合、はるかに役立ちます。コミュニティの確認は意見こと- LynnLangitの答え@のupvotesを比較:) OPが尋ね「私はSQL Server 2008 R2で文字列を連結しますか?」
Honza Zidek


46

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

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

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


6
ヒント:varcharのサイズが指定されていない場合(例:varchar(50))、sqlはデフォルトの30を使用します。キャストされる変数/値がデフォルトよりも大きい場合、エラーを発生させずに切り捨てられます。
Swifty

23

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

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

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

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

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

おかげで、列リスト内で '' + f.columnName + ''を使用するとうまくいきます!
ルーク

2
@kuklei私のSQLサーバー上で、SELECT 'varchar(' + 5 + ')'私はあなたの答えが成立しないと思うので、「データ型intへのnvarchar値『(varchar型』に変換する際の変換に失敗しました」エラーがスローされます。
アレクサンダー

5

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スケーラー関数ソリューションは2つの引数に制限されています。+

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


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

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

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

すなわち

Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))

2

はい、関数はSQL 2008にはありません。キャスト操作を使用して実行できます。

例えば、我々は持っているemployeeテーブルを、あなたがしたいnameapplydate

だからあなたは使うことができます

Select   cast(name as varchar) + cast(applydate as varchar) from employee

concat関数が機能していない場所でも機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.