T-SQL - CONCAT 関数の使い方と注意点:文字列を結合する方法
CONCAT 関数の使い方と注意点:文字列を結合する方法
SQL Server で複数の文字列をつなげたいときに便利なのが CONCAT 関数です。
+ 演算子と似ていますが、CONCAT 関数を使うと、より安全に文字列を結合することができます。
この記事では、CONCAT 関数の基本的な使い方から、実務で役立つ例、注意点などをご説明します。
CONCAT 関数の基本的な使い方
SQL Server の CONCAT 関数は、複数の文字列を 1 つに結合するための T-SQL 関数です。
SQL Server 2012 以降で使用可能です。
CONCAT 関数の構文は以下の通りです。
CONCAT ( 引数1, 引数2 [, ..., 引数N ] )
引数は少なくとも 2 個は必須で、最大 254 個まで指定できます。
全ての引数を自動的に文字列型に変換してから、前から結合して、ひとつの文字列を生成します。
引数が NULL の時は、空の文字列に変換されて、結合されます。
すべての引数が NULL の時は、VARCHAR(1) 型の空の文字列が返ってきます。
それでは、CONCAT 関数を使って、文字を結合してみましょう。
DECLARE @Value1 VARCHAR(5) = 'Test', @Value2 INT = 123, @Value3 CHAR(5), @Value4 NVARCHAR(5) = N'テスト'; SELECT CONCAT(@Value1, @Value2, @Value3, @Value4) AS ConcatResult;
[実行結果]
@Value1 は VARCHAR 型, @Value2 は INT 型, @Value3 は CHAR 型, @Value4 は NVARCHAR 型で定義した変数です。
これらの 4 つの変数を、CONCAT 関数に渡すことで、前から結合した文字列を取得しています。
実行結果としては、 "Test123テスト" が得られています。
@Value2 は INT 型 ですが文字列に変換され、@Value3 は NULL なので、空文字列として結合されています。
CONCAT 関数の実務で役立つ使い方
テーブルに学生の情報を FirstName と LastName などを分けて保存していて、レポート用などにつなげて表示したい時があるかもしれません。
そんな時は CONCAT 関数を使って文字列を結合すると便利です。
例えば、次のような、学生 (Student) を管理する Student テーブルがあります。
SELECT StudentID, FirstName, LastName, Gender FROM Student ORDER BY StudentID;
この Student テーブルの StudentID と LastName と FirstName をつなげたい時は次のようにできます。
SELECT StudentID, FirstName, LastName, Gender, CONCAT(StudentID, ': ', LastName, ' ', FirstName) AS StudentName_Concat, CAST(StudentID AS NVARCHAR) + ': ' + ISNULL(LastName, '') + ' ' + ISNULL(FirstName, '') AS StudentName_Plus FROM Student ORDER BY StudentID;
[実行結果]
StudentName_Concat が CONCAT 関数を使って結合した結果です。
StudentName_Plus が + 演算子を使って結合した結果です。
CONCAT 関数を使った場合、StudentID は INT 型ですが、変換したりせず、つなげたいカラムや文字列をそのまま順番に前から引数として渡しています。
同じことを + 演算子を使ってやろうとすると、StudentID は文字列のデータ型に CAST や CONVERT しなければなりません。
また、LastName や FirstName のどれかが NULL の時は、式全体が NULL になってしまうので、それを避けるために、ISNULL 関数を使って NULL を空の文字列に置き換える必要があります。
このように、CONCAT 関数を使えば、文字列の結合がシンプルかつ安全に行えます。
以上、CONCAT 関数の基本的な使い方から、実務で役立つ例、注意点などをご説明しました。