6

すべての行のすべての列 (不明な列) を 1 つの文字列に接続する必要があります

私はこのようにしたい:

select concat(*) from table;

問題は、関数 concat がパラメーター「*」を取らないことです。

誰でも私を助けることができますか?

例:

テーブル

GID | Name
----------
1   | nameA
2   | nameB
3   | nameC

出力が必要です:

1nameA
2nameB
3nameC
4

3 に答える 3

10
select rtrim(ltrim(replace(tablename::text, ',', ''), '('), ')') from tablename;
于 2013-01-21T01:28:46.447 に答える
6

2つのオプションを提案します。table_row to textどちらもテクニックを使って仕事をしています。

  1. クイック&ダーティ:

    select r::text from some_table AS r
    

    出力例:

    (289,310,,2010-09-10,6,0,1,6,0,30514,6,882,8,4,1,7,2,2,3,1,2,2,2,1,2,2,2,,1,51,0,0,0,0,0,1386,1,1,,6,,0,,,010100002082080000B3EA73156DA25C411E85EB61CB155641)
    
  2. データを操作する可能性のあるクイック:

    select translate(string_to_array(r::text, ',')::text, '()', '')::text[] from some_table AS r
    

    text[]これは、任意の配列関数を適用できるテキストの実際の配列 ( ) を返します:)
    サンプル出力 (括弧の開始と終了のタイプに注意してください):

    {289,310,"",2010-09-10,6,0,1,6,0,30514,6,882,8,4,1,7,2,2,3,1,2,2,2,1,2,2,2,"",1,51,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1386,1,1,"",6,"",0,"","",010100002082080000B3EA73156DA25C411E85EB61CB155641}
    

2 番目のアプローチとarray_to_string(array, delimiter)関数を使用すると、すべての列のテキスト表現を 1 つの文字列に連結できます。区切り文字を選択するだけです (例: ',''|'または'')。たとえば'|'、次のクエリを使用すると、次のようになります。

select array_to_string(translate(string_to_array(r::text, ',')::text, '()', '')::text[], '|') from some_table AS r

サンプル出力:

289|310||2010-09-10|6|0|1|6|0|30514|6|882|8|4|1|7|2|2|3|1|2|2|2|1|2|2|2||1|51|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1386|1|1||6||0|||010100002082080000B3EA73156DA25C411E85EB61CB155641

それが役立つことを願っています:)

于 2013-01-21T01:58:28.383 に答える
0

このフィドルselect concat(gid, user) from foo;のように試してみてください。

于 2013-01-21T01:13:41.040 に答える