#navi(../)
* PostgreSQLでカラムの文字列を連結する・ダブルパイプ [#j57fdd2a]
ダブルパイプ(||)を使うと文字列の連結を行うことができます。~
以下にダブルパイプ(||)の使用例を記します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連記事・関連資料 [#zf8415ce]
-[[MySQLでダブルパイプを使用して文字連結をする方法>MySQL/MySQLでダブルパイプを使用して文字連結をする方法]]

* ダブルパイプ(||)の使用例を実施した環境 [#z3a0c6d4]
本資料を実行するために使用した環境を以下に記します。
- OS : CentOS6
- PostgreSQL 8.4.13

作成したテーブルと挿入したデータは以下の通りです。
-t1テーブル
 sakura=# create table t1 (c1 varchar(10), c2 varchar(10), c3 varchar(10));
 CREATE TABLE
 sakura=# insert into t1 values('abc', 'def', 'ghi'),('jkl','mno','pqr');
 INSERT 0 2
 sakura=# select * from t1;
  c1  | c2  | c3  
 -----+-----+-----
  abc | def | ghi
  jkl | mno | pqr
 (2 行)


-t2テーブル
 sakura=# create table t2 (n1 int, n2 int, n3 int);
 CREATE TABLE
 sakura=# insert into t2 values(1,2,3),(4,5,6);
 INSERT 0 2
 sakura=# select * from t2;
  n1 | n2 | n3 
 ----+----+----
   1 |  2 |  3
   4 |  5 |  6
 (2 行)

* ダブルパイプ(||)を使ってカラム内容を連結してみる [#o9a163c1]
ダブルパイプ(||)を使ってカラム内容を連結してみます。

** character varying(VARCHAR)のカラムで実施 [#w360625d]
カラム名をダブルパイプ(||)で連結した時のSQLです。~
c1,c2,c3のカラム内容が連結されているのが確認できます。
 sakura=# select c1||c2||c3 as concat from t1;
   concat   
 -----------
  abcdefghi
  jklmnopqr
 (2 行)

* integerのカラムで実施 [#v3c9c880]
数値カラムで連結した例は以下の通りです。~
to_charにより文字列に変換し、桁あわせで発生した余分なスペースをtrimで削除しています。
 sakura=# select trim(to_char(n1,'9'))||trim(to_char(n2,'9'))||trim(to_char(n3,'9')) as concat from t2;
  concat 
 --------
  123
  456
 (2 行)

* ダブルパイプを使ってcsv出力してみる [#u27d5442]
PostgreSQLでは、psqlのオプションである、-A, -Fなどを利用すれば簡単にcsv出力できますが、この資料ではダブルパイプをつかって出力してみます。~
ダブルパイプでカラム間にカンマが表示されるようにします。~
以下、実行結果です。
 sakura=# select c1 ||','|| c2 ||','|| c3  from t1;
   ?column?   
 -------------
  abc,def,ghi
  jkl,mno,pqr
 (2 行)

実際にcsvファイルとして出力してみます。~
psqlで\t onを指定しタプルのみの表示としています。~
また、\oでファイルに出力するようになります。
 sakura=# \t on
 タプルのみを表示しています。
 sakura=# \o concat.csv
 sakura=# select c1 ||','|| c2 ||','|| c3  from t1;
 sakura=# 

catコマンドで作成したファイルを確認するとカンマ区切りのcsvファイルが作成されています。
 $ cat concat.csv 
  abc,def,ghi
  jkl,mno,pqr

psqlで指定した\t, \oをもとに戻す場合は以下の操作を行います。
 sakura=# \t off
 「タプルのみ表示」は off です。
 sakura=# \o

以上、ダブルパイプ(||)の使用例でした。

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS