sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres - Funktion til at returnere skæringspunktet mellem 2 ARRAY'er?

Siden 8.4 er der nyttige indbyggede funktioner i Postgres, som gør funktionen fra det første svar nemmere og muligvis hurtigere (det er i hvert fald, hvad EXPLAIN fortæller mig:"(cost=0.00..0.07 rows=1 width=64)" for denne forespørgsel vs. . "(cost=0.00..60.02 rows=1 width=64)" for den originale).

Den forenklede kode er:

SELECT ARRAY
    (
        SELECT UNNEST(a1)
        INTERSECT
        SELECT UNNEST(a2)
    )
FROM  (
        SELECT  array['two', 'four', 'six'] AS a1
              , array['four', 'six', 'eight'] AS a2
      ) q;

og ja, du kan gøre det til en funktion:

CREATE FUNCTION array_intersect(anyarray, anyarray)
  RETURNS anyarray
  language sql
as $FUNCTION$
    SELECT ARRAY(
        SELECT UNNEST($1)
        INTERSECT
        SELECT UNNEST($2)
    );
$FUNCTION$;

som du kan kalde som

SELECT array_intersect(array['two', 'four', 'six']
                     , array['four', 'six', 'eight']);

Men du kan lige så godt kalde det inline også:

 SELECT array(select unnest(array['two', 'four', 'six']) intersect
              select unnest(array['four', 'six', 'eight']));


  1. Er det muligt at bruge en MySql brugerdefineret variabel i en .NET MySqlCommand?

  2. Hvordan specificerer du IN-sætning i en dynamisk forespørgsel ved hjælp af en variabel?

  3. JSON_ARRAY_APPEND() – Tilføj værdier til et JSON-array i MySQL

  4. DATEDIFF-funktion i Oracle