sql >> Databáze >  >> RDS >> PostgreSQL

Odeberte jednu, nejedinečnou hodnotu z pole

Na základě mé staré odpovědi na dba.SE, kterou jste našli a dobře využili:

Můžete to udělat ještě o krok dále:

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

Tato funkce bere hodnotu prvku k odstranění jako 2. parametr. Pomocí polymorfního pseudotypu anyelement podle toho, aby to fungovalo pro jakýkoli typ pole.

Poté UPDATE prostě je:

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

db<>fiddle zde

Při použití mé původní funkce f_array_remove_elem() který zaujímá pozici indexu místo hodnoty prvku, můžete se obejít bez poddotazu:

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

Může být dokonce o něco rychlejší než moje nová funkce.
A všimněte si, že jednodušší verze v dolní části mé staré odpovědi funguje pro Postgres 9.6.



  1. 2 způsoby, jak získat znakové sady dostupné v MariaDB

  2. Další bílá kniha 12c Optimizer

  3. Přejmenujte omezení CHECK v SQL Server pomocí T-SQL

  4. Někdo se naboural do mé databáze – jak?