sql >> Database >  >> RDS >> PostgreSQL

De positie van een waarde in PostgreSQL-arrays vinden

De documentatie beveelt aan met behulp van de generate_subscripts functie. De onderstaande functie emuleert de array_search van PHP :

CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)
RETURNS INT AS $$
    SELECT i
      FROM generate_subscripts($2, 1) AS i
     WHERE $2[i] = $1
  ORDER BY i
$$ LANGUAGE sql STABLE;

Dit retourneert de index van de eerste overeenkomst, indien aanwezig. Als je alle overeenkomsten wilt, verander dan gewoon RETURNS INT naar RETURNS SETOF INT . Deze functie retourneert, zoals het is, NULL als er geen overeenkomst is gevonden.

Deze functie werkt alleen met eendimensionale arrays.

Houd er ook rekening mee dat array_search(NULL, a) retourneert altijd NULL , zelfs als de array null-elementen bevat:

> SELECT array_search(null, array[1, 2, null, 4]);
 array_search 
--------------

(1 row)

Dit komt omdat SQL NULL = NULL . beschouwt onbekend zijn (d.w.z. NULL ). Zie functions-comparison . Als u array_search . wilt om NULL . te kunnen vinden elementen, wijzigen

     WHERE $2[i] = $1

naar

     WHERE $2[i] IS NOT DISTINCT FROM $1


  1. Een SQL Server-cursor converteren naar MySQL-equivalent

  2. Cakephp:tijdens het invoegen van het tinyint-veld. Alleen 0 of 1 . krijgen

  3. Heroku postgresql databasenaam

  4. Hoe index efficiënt te gebruiken in mysql-query