+ (文字列連結) (Transact-SQL)
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウス
文字列式の中の演算子であり、2 つ以上の文字列やバイナリ文字列、列、文字列と列名の組み合わせを 1 つの式に連結します (文字列演算子)。 SELECT 'book'+'case';
の例では、bookcase
が返されます。
構文
expression + expression
Note
SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。
引数
式 (expression)
イメージ、ntext、またはテキストのデータ型を除く、文字データ型およびバイナリ データ型カテゴリのいずれかのデータ型の有効な式。 両方の式は、同じデータ型でなければなりません。または、一方の式をもう一方の式のデータ型に暗黙的に変換できる必要があります。
戻り値の型
優先順位が最も高い引数のデータ型を返します。 詳細については、「データ型の優先順位」を参照してください。
解説
文字列の連結の結果が 8,000 バイトを超える場合、結果は切り捨てられます。 ただし、連結された文字列の少なくとも 1 つが大きな値型の場合、切り捨ては行われません。
長さ 0 の文字列と文字
文字列連結演算子は +
、空の長さ 0 の文字列で動作する場合と、値が不明な場合 NULL
とは動作が異なります。 長さがゼロの文字列は、間に文字を挟まない 2 つの単一引用符で指定できます。 長さ 0 のバイナリ文字列は 0x
、16 進定数にバイト値を指定せずに指定できます。 長さがゼロの文字列の連結では、常に 2 つの指定された文字列を連結します。
NULL 値の連結
値を持つ文字列を NULL
操作する場合、連結の結果はセッション設定によって異なります。 値に対して NULL
実行される算術演算と同様に、既知の値に値を追加すると NULL
、通常、結果は不明な値になります。値を使用して NULL
実行される文字列連結操作も結果を NULL
生成する必要があります。
ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL
の設定を変更することにより、この動作を変更できます。 詳しくは、「SET CONCAT_NULL_YIELDS_NULL」をご覧ください。
必要に応じて CAST と CONVERT を使用する
2 つのバイナリ間にある任意の文字列を、その両端にあるバイナリ文字列と結合する場合、文字データへの明示的な変換を使用する必要があります。
次の例は、バイナリ連結で使用する必要がある場合CONVERT
、または CAST
、またはCAST
使用する必要がない場合CONVERT
を示しています。
この例では、2 つのバイナリ文字列を連結するため、no または CAST
function は必要ありませんCONVERT
。
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- No CONVERT or CAST function is required because this example
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2;
この例では、2 つのバイナリ文字列とスペースを連結するため、 CONVERT
1 つまたは CAST
複数の関数が必要です。
DECLARE @mybin1 VARBINARY(5), @mybin2 VARBINARY(5);
SET @mybin1 = 0xFF;
SET @mybin2 = 0xA5;
-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(VARCHAR(5), @mybin1) + ' '
+ CONVERT(VARCHAR(5), @mybin2);
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS VARCHAR(5)) + ' '
+ CAST(@mybin2 AS VARCHAR(5));
例
この記事の Transact-SQL コード サンプルは AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。
A. 文字列連結を使用する
次の例では、複数の文字列の列見出し Name
の下に 1 つの列を作成し、その後に、そのユーザーのファミリ名の後にコンマ、1 つのスペース、およびユーザーの名を付けます。 結果セットは、ファミリ名の昇順、アルファベット順、名順になります。
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Person
ORDER BY LastName ASC, FirstName ASC;
B. 数値データ型と日付データ型を結合する
次の例では、CONVERT
関数を使用して、numeric 型と date データ型を連結します。
SELECT 'The order is due on ' + CONVERT(VARCHAR(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO
結果セットは次のようになります。
------------------------------------------------
The order is due on 04/23/2007
C: 複数の文字列連結を使用する
次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、Adventure Works Cycles の副会長の最初の頭文字とファミリ名を表示します。 コンマは、ファミリ名の後に追加され、最初のイニシャルの後にピリオドが追加されます。
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle
FROM Person.Person AS p
JOIN HumanResources.Employee AS e
ON p.BusinessEntityID = e.BusinessEntityID
WHERE e.JobTitle LIKE 'Vice%'
ORDER BY LastName ASC;
GO
結果セットは次のようになります。
Name Title
------------- ---------------`
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
D. 連結で大きな文字列を使用する
次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、最終的な文字列の計算を試行します。 式の評価は左から始まるので、結果セットの最後の長さは 16,000 です。つまり、@x
@y
+ @z
+ =>(@x + @z
) + @y
です。 この場合、(@x
+ @z
) の結果は 8,000 バイトで切り捨てられ、結果 @y
セットに追加され、最終的な文字列長は 16,000 になります。 大きな値型の文字列であるため @y
、切り捨ては行われません。
DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO
結果セットは次のようになります。
y
-------
16000
例: Azure Synapse Analytics、Analytics Platform System (PDW)
この記事の Transact-SQL コード サンプルは AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。
E. 複数の文字列連結を使用する
次の例では、複数の文字列を連結して 1 つの長い文字列を形成し、ファミリ名と、サンプル データベース内の副社長の最初のイニシャルを表示します。 コンマは、ファミリ名の後に追加され、最初のイニシャルの後にピリオドが追加されます。
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title
FROM DimEmployee
WHERE Title LIKE '%Vice Pres%'
ORDER BY LastName ASC;
結果セットは次のようになります。
Name Title
------------- ---------------
Duffy, T. Vice President of Engineering
Hamilton, J. Vice President of Production
Welcker, B. Vice President of Sales
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示