PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Премахнете една, неуникална стойност от масив

Въз основа на моя стар отговор на dba.SE, който намерихте и използвахте добре:

Може да направите една крачка напред:

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';

Тази функция приема стойността на елемента за премахване като втори параметър. Използване на полиморфния псевдотип anyelement съответно, за да работи това за всеки тип масив.

След това UPDATE просто е:

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

db<>fiddle тук

Докато използвах оригиналната си функция f_array_remove_elem() който заема позицията на индекса вместо стойността на елемента, можете да направите без подзаявка:

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

Може дори да е малко по-бързо от новата ми функция.
И имайте предвид, че по-опростената версия в долната част на стария ми отговор работи за 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. Не може да се импортира .csv в Cloud SQL от конзолата

  2. Какви са плюсовете и минусите на извършването на изчисления в sql спрямо във вашето приложение

  3. PHP не зарежда php_pgsql.dll в Windows

  4. Има ли нещо като функция zip() в PostgreSQL, която комбинира два масива?

  5. Как работи INTERSECT в PostgreSQL