sql >> データベース >  >> RDS >> PostgreSQL

テキスト配列に`trim()`と `regexp_replace()`を適用します

    コードがmultiplevaluesを変更することはありません 配列。各要素を変更し、その新しい値を破棄するだけです。

    結果を次のように集計できる変数が必要です:

    CREATE OR REPLACE FUNCTION manipulate_array(multiplevalues text[])
    RETURNS text[] AS 
    $BODY$
      DECLARE 
        singlevalue text;
        l_result text[] := '{}'::text[]; -- initialize with an empty array
      BEGIN
        FOREACH singlevalue IN ARRAY multiplevalues LOOP
            SELECT trim(regexp_replace(singlevalue, '\s+', ' ', 'g')) INTO singlevalue;
            l_result := l_result || singlevalue; -- append to the result
        END LOOP;
    
        RETURN l_result; -- return the new array, not the old one
      END;
    $BODY$
    LANGUAGE plpgsql VOLATILE
    COST 100;
    

    ただし、これは、unnestとarray_aggおよびプレーンSQL関数(PL / pgSQLではなく)を使用して少し簡単に実行できます

    最初に配列のネストを解除し、値と集計をトリミングして配列に戻す必要があります。

    あなたが何をしようとしているのかわかりませんが、これにより配列内のすべての値がトリミングされ、新しい値が返されます:

    create function trim_all(p_values text[])
      returns text[]
    as
    $$
      select array_agg(trim(regexp_replace(t.v, '\s+', ' ', 'g')) order by t.nr)
        from unnest(p_values) with ordinality as t(v, nr);
    $$
    language sql;
    


    1. Laravel 4 Eloquentで列を連結する方法は?

    2. R12.2で管理サーバーを追加する方法

    3. Oracle SQL ディープ アップデート

    4. 一般的なMySQLフィールドとそれらの適切なデータ型