SQL Serverでデータを操作する際、複数のカラムの値を結合して1つの文字列として扱いたい場面が多くあります。例えば、次のようなケースです。
- フルネームの作成(姓 + 名)
- 住所の組み立て(都道府県 + 市区町村 + 番地)
- 注文データの情報をまとめる(注文番号 + 商品名 + 数量)
SQL Serverでは、文字列を結合する方法として +
演算子 や CONCAT()
関数 などが利用できます。また、複数行のデータをまとめて1つの文字列にする場合は STRING_AGG()
などのテクニックもあります。
この記事では、SQL Serverで文字列を結合するさまざまな方法を、基本的な使い方から応用テクニックまで詳しく解説していきます。
では、さっそく見ていきましょう!
+ 演算子を使った文字列結合
SQL Serverでは、+
演算子を使って文字列を結合することができます。これはシンプルで直感的な方法であり、基本的な文字列操作に広く利用されます。
基本的な使い方
+
演算子を使うと、複数の文字列を結合できます。
SELECT 'Hello' + ' ' + 'World' AS Result;
実行結果
Result
----------------
Hello World
このように、+
を使うことで文字列同士を連結できます。
NULL値を含む場合の注意点
+
演算子を使用すると、結合対象に NULL値が含まれている場合、結果がNULLになってしまう という特性があります。
SELECT 'Hello' + NULL + 'World' AS Result;
実行結果
Result
----------------
NULL
NULL値が含まれると、結合全体がNULLになってしまいます。
NULLを回避するには、ISNULL()
関数を使用してNULLを空文字 (''
) に変換するとよいでしょう。
SELECT 'Hello' + ISNULL(NULL, '') + 'World' AS Result;
実行結果
Result
----------------
HelloWorld
この方法を使うことで、NULL値を含む場合でも適切に文字列を結合することができます。
もう一点、+
演算子を使う場合には、文字列と数値型を直接結合しようとした場合、エラーとなってしまう点にも注意しましょう!
CONCAT() 関数を使った文字列結合
SQL Server 2012 以降では、CONCAT()
関数 を使って文字列を結合できます。+
演算子とは異なり、NULL
の扱いが異なるため、より安全に文字列を連結できます。
基本的な使い方
CONCAT()
は、複数の文字列を引数として渡すことで、1つの文字列に結合します。
SELECT CONCAT('Hello', ' ', 'World') AS Result;
実行結果
Result
----------------
Hello World
このように、シンプルな記述で文字列を結合できます。
NULL値を含む場合の動作
+
演算子では、結合対象に NULL
が含まれていると、結果が NULL
になってしまいました。しかし、CONCAT()
は NULL
を自動的に 空文字 (''
) に変換 するため、安全に結合できます。
SELECT CONCAT('Hello', NULL, 'World') AS Result;
実行結果
Result
----------------
HelloWorld
NULL
を意識せずにそのまま使える点が、+
演算子よりも便利なポイントです。
数値型や日付型を含めた文字列結合
CONCAT()
は、数値型や日付型のデータを自動的に 文字列型に変換 して結合できます。+
演算子のように CAST()
や CONVERT()
を使わなくても、エラーが発生しません。
SELECT CONCAT('注文番号: ', 1234, ', 日付: ', GETDATE()) AS Result;
実行結果
Result
----------------------------
注文番号: 1234, 日付: Feb 25 2025 12:34PM
このように、CONCAT()
は異なるデータ型を含む文字列結合にも適しています。
STRING_AGG() を使った複数行の文字列結合
SQL Server 2017 以降では、STRING_AGG()
関数 を使うことで、複数行のデータを1つの文字列として結合 することができます。これは、グループ化されたデータをまとめて表示したい場合に非常に便利です。
基本的な使い方
STRING_AGG(列名, 区切り文字)
の形式で使用し、指定した列のデータを1つの文字列に連結 できます。
例:商品名をカンマ区切りで結合する
SELECT STRING_AGG(ProductName, ', ') AS ProductList
FROM Products;
実行結果
ProductList
-----------------------------------
りんご, バナナ, みかん, ぶどう
このように、複数行のデータを 1つの文字列にまとめる ことができます。
まとめ
本記事では、SQL Server における文字列結合の方法を解説しました。それぞれの方法の特徴を振り返ってみましょう。
方法 | 特徴 | 使用可能バージョン |
---|---|---|
+ 演算子 | 直感的に使えるが、NULL が含まれると結果が NULL になる | すべてのバージョン |
CONCAT() | NULL を空文字に変換し、安全に結合できる | SQL Server 2012 以降 |
STRING_AGG() | 複数行のデータを 1 つの文字列にまとめる | SQL Server 2017 以降 |
SQL Server のバージョンや用途に応じて、適切な方法を選びましょう!
以上、SQL Server における文字列結合の方法について解説しました。
この記事が参考になれば幸いです。
コメント