ダブルパイプ(||)を使うと文字列の連結を行うことができます。
以下にダブルパイプ(||)の使用例を記します。
本資料を実行するために使用した環境を以下に記します。
作成したテーブルと挿入したデータは以下の通りです。
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 行)
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 行)
ダブルパイプ(||)を使ってカラム内容を連結してみます。
カラム名をダブルパイプ(||)で連結した時のSQLです。
c1,c2,c3のカラム内容が連結されているのが確認できます。
sakura=# select c1||c2||c3 as concat from t1; concat ----------- abcdefghi jklmnopqr (2 行)
数値カラムで連結した例は以下の通りです。
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 行)
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
以上、ダブルパイプ(||)の使用例でした。