sql >> Database >  >> RDS >> PostgreSQL

Eén, niet-unieke waarde uit een array verwijderen

Gebaseerd op mijn oude antwoord op dba.SE dat je hebt gevonden en goed hebt gebruikt:

Je zou nog een stap verder kunnen gaan:

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

Deze functie neemt de waarde van het te verwijderen element als 2e parameter. Het polymorfe pseudo-type anyelement gebruiken dienovereenkomstig om dit voor elk type array te laten werken.

Dan de UPDATE is gewoon:

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

db<>fiddle hier

Tijdens het gebruik van mijn originele functie f_array_remove_elem() die de indexpositie inneemt in plaats van de elementwaarde, zou je zonder een subquery kunnen doen:

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

Misschien zelfs een beetje sneller dan mijn nieuwe functie.
En merk op dat de eenvoudigere versie onderaan mijn oude antwoord werkt voor Postgres 9.6.



  1. Hoe MySQL op Windows 10 te installeren? – Uw one-stop-oplossing om MySQL te installeren

  2. Nifi PutSQL Timestamp/Datetime-fout kan niet worden geconverteerd fout

  3. Database maken bij opstarten docker-compose

  4. Mysql meerdere rij insert-select statement met last_insert_id()