はじめに
SELECT文でデータを取得する際に、取得した値を加工して出力したい場合があると思います。
例えば次のようなTABLE(テーブル名:personal_information)からデータを取得する際に、
| ID | LASTNAME | ADDRESS | AGE |
|---|---|---|---|
| 11111 | 鈴木 | 静岡 | 22 |
| 22222 | 加藤 | 愛知 | 23 |
| 33333 | 佐藤 | 山形 | 36 |
| 44444 | 田中 | 京都 | 26 |
-
鈴木,加藤ではなく、鈴木さん,加藤さんと 「さん」付けで出力 する -
11111,鈴木,静岡,22のように複数のカラムをカンマで結合して1つの文字列として出力する
という要求を実現する場合、文字列連結を用いることになります。
今回はこの文字列連結の方法について以下に解説していきます。
実現方法
今回はDB2を使用します
「さん」付けで出力したい場合
まず「さん」付けで出力する方法について解説します。
今回のように取り出すカラムに文字列を追加したい場合はCONCAT関数を使用します。
CONCAT関数
CONCAT関数は2つの文字列を連結する関数で、次のように使用します。
SELECT CONCAT(LASTNAME,'さん') AS name FROM personal_information
このクエリを実行すると次のような結果が表示されます。
name
------------
鈴木さん
加藤さん
佐藤さん
田中さん
これで無事、TABLEに存在する苗字に「さん」をつけて取り出すことができます。
複数のカラムをカンマで結合して1つの文字列として出力したい場合
複数のカラムをカンマで結合して1つの文字列として出力する方法について説明します。
「さん」付けで出力する方法と同様に文字列連結を用いれば実現できるのですが、DB2のCONCAT関数は3つ以上の文字列を連結することができません。
MySQLやPostgresqlでは3つ以上の文字列連結が可能です
一応、CONCAT関数を入れ子にする形で記載すれば実行可能ですが、CONCAT関数以外で複数の文字列を連結をする場合には||演算子を使用します。
||演算子
||演算子は複数の文字列を連結することができ、次のように使用します。
SELECT ID || ',' || LASTNAME || ',' || ADDRESS || ',' || AGE AS personal_info FROM personal_information WHERE ID = 11111
このクエリを実行すると次のような結果が表示されます。
personal_info
------------
11111,鈴木,静岡,22
上記の結果のように、カラムが1つにまとまり、カンマが結合した状態で出力されました。
注意点
DB2の||演算子はNULL値を含む文字列を連結すると、結果がNULLになるという仕様があります。
その場合の対処方法はこちらの記事を参考にしてください。