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

Xóa một giá trị không phải duy nhất khỏi một mảng

Dựa trên câu trả lời cũ của tôi trên dba.SE mà bạn đã tìm thấy và sử dụng tốt:

Bạn có thể tiến thêm một bước nữa:

CREATE OR REPLACE FUNCTION f_array_remove_elem1(anyarray, anyelement)
  RETURNS anyarray LANGUAGE sql IMMUTABLE AS
'SELECT $1[:idx-1] || $1[idx+1:] FROM array_position($1, $2) idx';

Hàm này nhận giá trị của phần tử cần loại bỏ làm tham số thứ 2. Sử dụng anyelement kiểu giả đa hình phù hợp để làm cho điều này hoạt động cho bất kỳ loại mảng nào.

Sau đó, UPDATE đơn giản là:

UPDATE test_table
SET    test_array = f_array_remove_elem1(test_array, 'B')
WHERE  id = 1;

db <> fiddle tại đây

Trong khi sử dụng hàm gốc của tôi f_array_remove_elem() lấy vị trí chỉ mục thay vì giá trị phần tử, bạn có thể thực hiện mà không cần truy vấn con:

UPDATE test_table
SET    test_array = f_array_remove_elem(test_array, array_position(test_array, 'B'))
WHERE  id = 1;

Thậm chí có thể nhanh hơn một chút so với chức năng mới của tôi.
Và lưu ý rằng phiên bản đơn giản hơn ở cuối câu trả lời cũ của tôi hoạt động cho Postgres 9.6.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn ĐẶT HÀNG THEO số hàng được trả về từ một LỰA CHỌN khác

  2. Truy vấn tùy chỉnh trong Spring với JPA

  3. Postgresql:Không thể truy cập vào tệp «$ libdir / postgis-2.1» không có tệp hoặc thư mục như vậy

  4. TypeORM có điều kiện nullable?

  5. Dấu gạch dưới hoặc camelCase trong mã định danh PostgreSQL, khi ngôn ngữ lập trình sử dụng camelCase?