14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【DB2】SQLを用いた文字列結合の基本

Last updated at Posted at 2018-11-24

#はじめに
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関数を用いて名前をさん付けで呼び出すクエリは以下となります。

SQL
SELECT CONCAT(LASTNAME,'さん') AS name FROM personal_information

このクエリを実行すると次のような結果が表示されます。

検索結果(イメージ)
name
------------
鈴木さん
加藤さん
佐藤さん
田中さん

これで無事、TEBLEに存在する苗字に「さん」をつけて取り出すことができます。

##②:複数のカラムをカンマで結合したい場合
次に②を実現する方法について説明します。
①と同様に文字列連結を用いれば実現できるのですが、CONCAT関数は3つ以上の文字列を連結することができません。(MySQLだと3つ以上の文字列連結が可能です)
一応、CONCAT関数を入れ子にする形で記載すれば実行可能ですが、
CONCAT関数以外で複数の文字列を連結をする場合には**||演算子**を使用します。

【||演算子】
文字列式1 || 文字列式2

SQL
SELECT ID ||,|| LASTNAME ||,|| ADDRESS ||,|| AGE FROM personal_information WHERE ID = 11111

このクエリを実行すると次のような結果が表示されます。

検索結果(イメージ)
1
------------
11111,鈴木,静岡,22

上記の結果のように、カラムが1つにまとまり、カンマが結合した状態で出力されると思います。
カラム名が1となっていますが、変更したい場合は連結したカラムの最後にAS句をつけましょう。

#注意点
文字列結合を行うと稀に値が全く取り出せない場合があります、、、
値が取り出せない場合はこちらの記事も参考にしてください。

#参考記事
イチからはじめる - SQLリファレンス

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?