2016-06-24 14 views
1

1つのステートメントを使用して、テーブル内のすべてのvarchar列からキャリッジと改行を削除する方法があるかどうかを確認しようとしています。Postgresqlを使用して、テーブル内のすべての列の改行と改行を削除するにはどうすればよいですか?

私は簡単には存在しない限り、私たちは私が行うにはしたくないすべての列、のための1つを持っている必要がありますその場合

select regexp_replace(field, E'[\\n\\r]+', ' ', 'g') 

以下のようなものを使用して、単一の列のためにこれを行うことができることを知って方法。

ありがとうございました!

答えて

0

あなたはどちらか(あなたのtable`の名前でmy_tableを置き換える)、次の例のように、動的SQLを実行し、または直接DO経由して、それを実行するためにplpgsqlが関数を作成、これを行うことができます。

do $$declare _q text; _table text = '<mytable>'; 
begin 
    select 'update '||attrelid::regclass::text||E' set\n'|| 
     string_agg(' '||quote_ident(attname)||$q$ = regexp_replace($q$||quote_ident(attname)||$q$, '[\n\r]+', ' ', 'g')$q$, E',\n' order by attnum) 
    into _q 
    from pg_attribute 
    where attnum > 0 and atttypid::regtype::text in ('text', 'varchar') 
    group by attrelid 
    having attrelid = _table::regclass; 

    raise notice E'Executing:\n\n%', _q; 

    -- uncomment this line when happy with the query: 
    -- execute _q; 
end;$$; 
+0

おかげで多くのことを!私はこれを試してみる。 –

関連する問題