文字列を連結するSQL文と実行結果 (CONCAT関数)

ポクルー
質問: 列同士の値を合わせた文字列にしたい
テーブルからレコードを取得した際に、ある列(name列)と別の列(class列)の値を連結して、"name列の値 (class列の値)" のようにしたいのですが、 どのようなSQL文で実現できますか?

複数の列の値を連結する場合には、CONCAT関数を利用します。

CONCAT関数の書式

CONCAT関数の書式は以下です。 値を連結した結果を関数の戻り値として返します。

CONCAT([値,または列名 1], [値,または列名 2], ... [値,または列名 n])

例1

以下のテーブルを用意します。

ProductsB テーブル
idmodelnameclasscategoryprice
5C-XM01モーダンチェアホームチェア56000
6X-XD05ラージデスクオフィステーブル87000
7A-DA40ラウンドダイニングチェアホームチェア28000
8O-XX100ナチュラルオフィスオフィスチェア13800


次のSQL文を実行します。name列とcategory列の値を連結した文字列を取得します。

SELECT CONCAT(TRIM(name),TRIM(category) FROM ProductsB


実行結果は以下になります。

モーダンチェアチェア
ラージデスクテーブル
ラウンドダイニングチェアチェア
ナチュラルオフィスチェア

例2

例1と同じテーブルで以下のSQLを実行します。
"name列の値 (class列の値)" の文字列を取得します。

SELECT CONCAT(TRIM(name),' (',TRIM(category),')') FROM ProductsB


実行結果は以下になります。

モーダンチェア (チェア)
ラージデスク (テーブル)
ラウンドダイニングチェア (チェア)
ナチュラルオフィス (チェア)

補足:CONCAT関数を利用しない方法 (SQL Server, PostgreSQL)

SQL Serverの場合は + 演算子で文字列を連結することができます。また、PostgreSQLの場合は || 演算子で文字列を連結することができます。 ただしいづれかの要素が NULL の場合結果がNULLとなってしまう点に注意が必要です。
以下のSQL文を実行して動作を確認します。

SELECT TRIM(ISNULL(name,'')) + ' (' + TRIM(ISNULL(category,'')) + ')' FROM ProductsB


実行結果は以下になります。先の CONCAT関数を利用した場合と同じ結果になります。

モーダンチェア (チェア)
ラージデスク (テーブル)
ラウンドダイニングチェア (チェア)
ナチュラルオフィス (チェア)
AuthorPortraitAlt
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
作成日: 2025-05-21
Copyright © 1995–2025 iPentec all rights reserverd.