SQL Serverのクエリでテキストを連結するにはどうすればよいですか?


80

次のSQL:

SELECT notes + 'SomeText'
FROM NotesTable a 

エラーを与える:

データ型nvarcharとtextは、add演算子で互換性がありません。

回答:


81

唯一の方法は、テキストフィールドをnvarcharフィールドに変換することです。

Select Cast(notes as nvarchar(4000)) + 'SomeText'
From NotesTable a

それ以外の場合は、アプリケーションで連結を行うことをお勧めします。


それで、あなたはtext「巨大な」4000としてキャストして、nvarcharほとんど何でも収まるようにしますか?
マシュー

23

NULL値も検討することをお勧めします。あなたの例では、列のメモにnull値がある場合、結果の値はNULLになります。null値を空の文字列として動作させたい場合(答えが「SomeText」になるように)、IsNull関数を使用します。

Select IsNull(Cast(notes as nvarchar(4000)),'') + 'SomeText' From NotesTable a

21

SQL Server 2005以降を使用している場合、[メモ]フィールドのデータのサイズによっては、文字列が切り捨てられる可能性がある特定の長さにキャストするのではなく、nvarchar(max)にキャストすることを検討してください。

Select Cast(notes as nvarchar(max)) + 'SomeText' From NotesTable a

2
これは正しい答えです。テキストの切り捨てを回避します。
ビリー2015年

それはより多くのメモリを使用しますか、それともソースサイズに何らかの形で「自動適応」しますか?
マシュー

6

文字列タイプを連結するには、文字列タイプを同じものに明示的にキャストする必要があります。この場合、「SomeText」(N「SomeText」)の前に「N」を追加するだけで問題を解決できます。それが機能しない場合は、Cast( 'SomeText' as nvarchar(8))を試してください。



2

SQL Server 2005(またはそれ以降)を使用している場合は、テーブル定義でNVARCHAR(MAX)への切り替えを検討することをお勧めします。SQL Server 2000のTEXT、NTEXT、およびIMAGEデータ型は、SQLServerの将来のバージョンで非推奨になる予定です。SQL Server 2005は、データ型との下位互換性を提供しますが、代わりにVARCHAR(MAX)、NVARCHAR(MAX)、およびVARBINARY(MAX)を使用する必要があります。

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