めも

技術メモとその他

【Postgresql】 テーブル全体を固定長データとして出力するサンプル

サンプルテーブルの構造は以下の通り

 

select * from nyukintable;

 id | siten | kokyakuid | nyukin | torihikibi 

----+-------+-----------+--------+------------

  1 | 東京  | 001       |  77500 | 2007-01-01

  2 | 大阪  | 002       |  56200 | 2007-01-02

  3 | 福岡  | 003       |  17900 | 2007-01-03

  4 | 東京  | 004       |  27000 | 2007-01-04

  5 | 大阪  | 005       |  71000 | 2007-01-05

  6 | 福岡  | 006       |  13100 | 2007-01-06

  7 | 東京  | 007       |    680 | 2007-01-07

  8 | 大阪  | 008       |   7600 | 2007-01-08

  9 | 福岡  | 009       |  61600 | 2007-01-09

 10 | 東京  | 010       |  28400 | 2007-01-10

 

1つの文字列に変換します

ついでにヘッダーもつけてみます

WITH read_str AS (

         SELECT rpad(nyukintable.id::text, 3, ' '::text) AS id,

            rpad(nyukintable.siten::text, 5, ' '::text) AS siten,

            rpad(nyukintable.kokyakuid::text, 8, ' '::text) AS kokyakuid,

            rpad(nyukintable.nyukin::text, 10, ' '::text) AS nyukin

           FROM nyukintable

        ), fix_header AS (

         SELECT '0001AAAABBBBCC'::text AS head

        ), data_rec AS (

         SELECT array_to_string(array_agg(ARRAY[read_str.id, read_str.siten, read_str.kokyakuid, read_str.nyukin]), ''::text) AS hurikomi

           FROM read_str

        )

 SELECT fix_header.head || data_rec.hurikomi

   FROM fix_header,

    data_rec;

 

結果

------------------------------------

 0001AAAABBBBCC1  東京   001     77500     2  大阪   002     56200     3  福岡   003     17900     4  東京   004     27000     5  大阪   005     71000     6  福岡   006     13100     7  東京   007     680       8  大阪   008     7600      9  福岡   009     61600     10 東京   010     28400     11 大阪   011     32700     12 福岡   012     46500     13 東京   013     10200     14 大阪   014     43000     15 福岡   015     48200     16 東京   016     83700     17 大阪   017     92400     18 福岡   018     17800     19 東京   019     91400     20 大阪   020     70300     21 福岡   021     37900     22 東京   022     3700      23 大阪   023     1900      24 福岡   024     91700     25 東京   025     6800      26 大阪   026     96600     27 福岡   027     55900     28 東京   028     65800     29 大阪   029     74400     30 福岡   030     76400     31 東京   031     90400     32 大阪   032     4300      33 福岡   033     16100     34 東京   034     63700     35 大阪   035     64000     36 福岡   036     83600     37 東京   037     19900     38 大阪   038     84900     39 福岡   039     3400      40 東京   040     16100     41 大阪   041     97400     42 福岡   042     1800      43 東京   043     1500      44 大阪   044     94100     45 福岡   045     62500     46 東京   046     4100      47 大阪   047     46200     48 福岡   048     51900     49 東京   049     7800      50 大阪   050     41200