#はじめに
SELECT文でデータを取得する際に、取得した値を加工して出力したい場合があると思います。
例えば次のようなTABLE(テーブル名:personal_information)があるとして、
ID | LASTNAME | ADDRESS | AGE |
---|---|---|---|
11111 | 鈴木 | 静岡 | 22 |
22222 | 加藤 | 愛知 | 23 |
33333 | 佐藤 | 山形 | 36 |
44444 | 田中 | 京都 | 26 |
①:苗字を取り出す際に「鈴木」,「加藤」ではなく、「鈴木さん」,「加藤さん」と「さん」付けで出力したい
②:1レコード取り出す際に、「11111,鈴木,静岡,22」のようにカンマをつけてCSVファイルっぽく出力したい
というようなことをしたい場合、文字列連結を用いて実現することが一般的です。
今回はこの文字列連結の方法について以下に解説していきます。
※今回はDB2を使用します
#実現方法
##①:名前に「さん」付けしたい場合
まず①を実現する方法について解説します。
今回のように取り出すカラムに文字列を追加したい場合はCONCAT関数を使用します。
【CONCAT関数】
CONCAT( 文字列1, 文字列2 )
CONCAT関数を用いて名前をさん付けで呼び出すクエリは以下となります。
SELECT CONCAT(LASTNAME,'さん') AS name FROM personal_information
このクエリを実行すると次のような結果が表示されます。
name
------------
鈴木さん
加藤さん
佐藤さん
田中さん
これで無事、TEBLEに存在する苗字に「さん」をつけて取り出すことができます。
##②:複数のカラムをカンマで結合したい場合
次に②を実現する方法について説明します。
①と同様に文字列連結を用いれば実現できるのですが、CONCAT関数は3つ以上の文字列を連結することができません。(MySQLだと3つ以上の文字列連結が可能です)
一応、CONCAT関数を入れ子にする形で記載すれば実行可能ですが、
CONCAT関数以外で複数の文字列を連結をする場合には**||演算子**を使用します。
【||演算子】
文字列式1 || 文字列式2
SELECT ID ||,|| LASTNAME ||,|| ADDRESS ||,|| AGE FROM personal_information WHERE ID = 11111
このクエリを実行すると次のような結果が表示されます。
1
------------
11111,鈴木,静岡,22
上記の結果のように、カラムが1つにまとまり、カンマが結合した状態で出力されると思います。
カラム名が1となっていますが、変更したい場合は連結したカラムの最後にAS句をつけましょう。
#注意点
文字列結合を行うと稀に値が全く取り出せない場合があります、、、
値が取り出せない場合はこちらの記事も参考にしてください。
#参考記事
イチからはじめる - SQLリファレンス