次の方法で共有


+ (文字列連結) (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス

文字列式の中の演算子であり、2 つ以上の文字列やバイナリ文字列、列、文字列と列名の組み合わせを 1 つの式に連結します (文字列演算子)。 SELECT 'book'+'case'; の例では、bookcase が返されます。

Transact-SQL 構文表記規則

構文

expression + expression

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

式 (expression)

imagentext、または text データ型を除く、文字データ型とバイナリ データ型カテゴリのいずれかの有効な式。 両方の式は、同じデータ型でなければなりません。または、一方の式をもう一方の式のデータ型に暗黙的に変換できる必要があります。

戻り値の型

優先順位が最も高い引数のデータ型を返します。 詳細については、「 Data 型の優先順位」を参照してください。

解説

文字列の連結の結果が 8,000 バイトを超える場合、結果は切り捨てられます。 ただし、連結された文字列の少なくとも 1 つが大きな値型の場合、切り捨ては行われません。

長さ 0 の文字列と文字

+文字列連結演算子は、空の長さ 0 の文字列で動作する場合と、NULLまたは不明な値で動作する場合とは動作が異なります。 長さがゼロの文字列は、間に文字を挟まない 2 つの単一引用符で指定できます。 長さ 0 のバイナリ文字列は、16 進定数にバイト値を指定せずに、 0x として指定できます。 長さがゼロの文字列の連結では、常に 2 つの指定された文字列を連結します。

NULL 値の連結

NULL値を持つ文字列を操作する場合、連結の結果はセッション設定によって異なります。 NULL値に対して実行される算術演算と同様に、NULL値が既知の値に追加されると、結果は通常は不明な値になります。NULL値を使用して実行される文字列連結操作でも、NULL結果が生成されます。

ただし、現在のセッションの CONCAT_NULL_YIELDS_NULL の設定を変更することにより、この動作を変更できます。 詳しくは、「SET CONCAT_NULL_YIELDS_NULL」をご覧ください。

必要に応じて CAST と CONVERT を使用する

2 つのバイナリ間にある任意の文字列を、その両端にあるバイナリ文字列と結合する場合、文字データへの明示的な変換を使用する必要があります。

次の例は、 CONVERTまたは CASTをバイナリ連結と共に使用する必要があり、 CONVERTまたは CASTを使用する必要がない場合を示しています。

この例では、2 つのバイナリ文字列を連結するため、 CONVERT または CAST 関数は必要ありません。

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 または 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 + @z + @y => (@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