PostgreSQL gør det meget nemt at sammenligne arrays af værdier ved hjælp af simple operatorer. I denne artikel vil vi se på, hvordan man sammenligner arrays i PostgreSQL-databasen.
Sådan sammenlignes arrays i PostgreSQL
PostgreSQL giver dig mulighed for at sammenligne arrays ved hjælp af lighedsoperatorer (=, <>), bestillingsoperatorer (>, <,>=, <=), indeslutningsoperatorer (@>, <@) og overlapningsoperatorer (&&).
Efter at PostgreSQL har sammenlignet arrays, returnerer den t for sand eller f for falsk som resultat.
Lad os se på hver af disse operatorer én efter én.
Sammenlign arrays for lighed
Ligestillingsoperatorer foretager en element-for-element-sammenligning for at kontrollere, om de to arrays er ens eller ej.
Her er eksempler på SQL-forespørgsler til at sammenligne to arrays ved hjælp af lighedsoperatorer. De følgende to arrays er ikke ens.
postgres=# select array[2,3,4] = array[1,2,5] as compare;
compare
---------
f
postgres=# select array[2,3,4] <> array[1,2,5]
as compare;
compare
---------
t
Sammenlign arrays for ordre
Ordreoperatorer (>, <,>=, <=) foretager en element-for-element-sammenligning mellem to arrays for at kontrollere, om hvert par af elementer følger den påkrævede rækkefølge. Hvis der ikke er uoverensstemmelse, returnerer det t, ellers f.
Her er et eksempel
postgres=# select array[1,3,5] >= array[1,3,4] as compare1, array[1,3,5] <= array[1,3,4,5] as compare2; compare1 | compare2 ----------+---------- t | f
I den første sammenligning er hvert element i det første array>=hvert element i det andet array. Derfor får du sandhed. I anden sammenligning har det første array ikke det 4. element, hvilket kræves til sammenligning med det 4. element i det andet array. Derfor mislykkes sammenligning, og du bliver falsk som et resultat.
Sammenlign arrays for indeslutning
Indeslutningsoperatorer (<@, @>) giver dig mulighed for at kontrollere, om et array indeholder et andet array ved hjælp af @>-operatoren, eller om et array er indeholdt af et andet array ved hjælp af <@-operatoren.
#to check if elements of array['b', 'c', 'd'] contain elements of array['b', 'c'] postgres=# select array['b', 'c', 'd'] @> array['b', 'c'] as contains; contains ---------- t # to check if array[1, 2, 4] is contained by array[4, 5, 2, 1] postgres=#select array[1, 2, 4] <@ array[4, 5, 2, 1] as is_contained_by; is_contained_by ----------------- t
Sammenlign arrays for overlap
Overlap operator (&&) lader dig kontrollere, om der er nogen fælles elementer i to arrays.
postgres=# select postgres-# array[2, 4] && array[4, 3] as overlap1, postgres-# array[0, 2] && array[1, 4] as overlap2; overlap1 | overlap2 ----------+---------- t | f
Har du brug for et rapporteringsværktøj til PostgreSQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!