PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Áp dụng `trim ()` và `regexp_replace ()` trên mảng văn bản

Mã của bạn không bao giờ thay đổi multiplevalues mảng. Nó chỉ thay đổi từng phần tử, sau đó ném giá trị mới đó đi.

Bạn cần một biến để có thể tổng hợp kết quả của mình thành:

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;

Nhưng điều này có thể được thực hiện đơn giản hơn một chút bằng cách sử dụng unnest và array_agg và một hàm SQL thuần túy (thay vì sau đó là PL / pgSQL)

Trước tiên, bạn cần giải phóng mảng, cắt các giá trị và tổng hợp lại thành một mảng.

Tôi không chắc mình hiểu bạn đang cố gắng làm gì, nhưng điều này sẽ cắt tất cả các giá trị bên trong mảng và trả về một giá trị mới:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để xuất lược đồ của cơ sở dữ liệu trong PostgreSQL?

  2. PostgreSQL:nối tiếp và danh tính

  3. Các tình huống thất bại PostgreSQL phổ biến nhất

  4. Biến ràng buộc cho tên cột trong PHP cho truy vấn Postgresql

  5. Cách sắp xếp các bộ giá trị riêng biệt trong một truy vấn PostgreSQL