【SQL Server】クエリ結果を自由自在に操る!整変数と文字列の印刷テクニック集
SQL Server で整変数と文字列を同じ行に印刷する方法
SQL Server でクエリを実行すると、結果セットが返されます。結果セットは、行と列で構成される表のようなデータ構造です。各行は、1 つ以上の列値を表します。
デフォルトでは、SQL Server は各列を新しい行に印刷します。しかし、整変数と文字列を同じ行に印刷したい場合があります。
方法
整変数と文字列を同じ行に印刷するには、次のいずれかの方法を使用できます。
- CONCAT 関数を使用する
CONCAT
関数は、2 つ以上の文字列を連結します。この関数を使用して、整変数を文字列に変換してから、2 つの文字列を連結できます。
SELECT CONCAT(id, ' - ', name) AS info
FROM customers;
このクエリは、customers
テーブルの id
列と name
列の値を連結し、info
という名前の新しい列に格納します。結果は次のようになります。
info
-------
1 - John Doe
2 - Jane Doe
3 - Peter Jones
- FOR XML PATH を使用する
FOR XML PATH
句は、XML 形式の結果セットを生成します。この句を使用して、整変数と文字列を同じ XML 要素内に含めることができます。
SELECT id, name
FOR XML PATH('row'), TYPE;
<row>
<id>1</id>
<name>John Doe</name>
</row>
<row>
<id>2</id>
<name>Jane Doe</name>
</row>
<row>
<id>3</id>
<name>Peter Jones</name>
</row>
- STUFF 関数を使用する
STUFF
関数は、文字列の一部を別の文字列で置き換えます。この関数を使用して、整変数を文字列に変換してから、文字列の一部を整変数で置き換えることができます。
SELECT STUFF((SELECT name FROM customers WHERE id = 1), 5, 4, ' - ') AS info;
このクエリは、customers
テーブルの id
が 1 のレコードの name
列の値を取得し、5 番目の文字から 4 番目の文字までの部分を -
に置き換えます。結果は次のようになります。
info
-------
John - Doe
SQL Server で整変数と文字列を同じ行に印刷するには、さまざまな方法があります。どの方法を使用するかは、状況によって異なります。
- 上記の例では、
customers
という架空のテーブルを使用しています。 - 実際のクエリでは、使用するテーブルと列を置き換える必要があります。
- 上記の方法は、SQL Server 2008 以降で使用できます。
-- customers テーブルを作成する
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- customers テーブルにデータを追加する
INSERT INTO customers (id, name)
VALUES
(1, 'John Doe'),
(2, 'Jane Doe'),
(3, 'Peter Jones');
-- 整変数と文字列を同じ行に印刷する
SELECT CONCAT(id, ' - ', name) AS info
FROM customers;
このコードは次の結果を返します。
info
-------
1 - John Doe
2 - Jane Doe
3 - Peter Jones
-- customers テーブルを作成する
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- customers テーブルにデータを追加する
INSERT INTO customers (id, name)
VALUES
(1, 'John Doe'),
(2, 'Jane Doe'),
(3, 'Peter Jones');
-- 整変数と文字列を同じ行に印刷する
SELECT id, name
FOR XML PATH('row'), TYPE;
<row>
<id>1</id>
<name>John Doe</name>
</row>
<row>
<id>2</id>
<name>Jane Doe</name>
</row>
<row>
<id>3</id>
<name>Peter Jones</name>
</row>
-- customers テーブルを作成する
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- customers テーブルにデータを追加する
INSERT INTO customers (id, name)
VALUES
(1, 'John Doe'),
(2, 'Jane Doe'),
(3, 'Peter Jones');
-- 整変数と文字列を同じ行に印刷する
SELECT STUFF((SELECT name FROM customers WHERE id = 1), 5, 4, ' - ') AS info;
info
-------
John - Doe
SELECT STRING_AGG(CONCAT(id, ' - ', name), ', ') AS info
FROM customers;
info
-------
1 - John Doe, 2 - Jane Doe, 3 - Peter Jones
CAST 関数と REPLACE 関数を使用する
CAST
関数は、データ型を変換します。REPLACE
関数は、文字列内の部分文字列を別の文字列に置き換えます。これらの関数を使用して、整変数を文字列に変換してから、文字列の一部を整変数で置き換えることができます。
SELECT REPLACE(CAST(id AS VARCHAR(50)), 1, 1, name) AS info
FROM customers;
このクエリは、customers
テーブルの id
列の値を文字列に変換し、最初の文字を name
列の値に置き換えます。結果は次のようになります。
info
-------
John Doe
Jane Doe
Peter Jones
FORMAT 関数を使用する
SELECT FORMAT(id, '0') + ' - ' + name AS info
FROM customers;
info
-------
01 - John Doe
02 - Jane Doe
03 - Peter Jones
列のエイリアスを使用する
一部の SQL Server バージョンでは、列のエイリアスを使用して、整変数と文字列を同じ行に印刷できます。
SELECT id AS id_str, name
FROM customers;
このクエリは、customers
テーブルの id
列の値を id_str
という名前のエイリアスに割り当て、name
列の値を同じ行に表示します。結果は次のようになります。
id_str name
------- --------
1 John Doe
2 Jane Doe
3 Peter Jones
注意事項
- 上記の方法は、すべての SQL Server バージョンで利用可能とは限りません。
- 使用する方法は、状況によって異なります。
sql sql-server t-sql