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

Finde positionen af ​​en værdi i PostgreSQL-arrays

dokumentationen anbefaler ved hjælp af generate_subscripts fungere. Funktionen nedenfor emulerer PHP's array_search :

CREATE FUNCTION array_search(needle ANYELEMENT, haystack ANYARRAY)RETURNER INT AS $$ SELECT i FROM gener_subscripts($2, 1) AS i WHERE $2[i] =$1 BESTILLE EFTER i$$ LANGUAGE sql STABLE; kode> 

Dette returnerer indekset for det første match, hvis det findes. Hvis du vil have alle matches, skal du blot ændre RETURNS INT til RETURNERER SETOF INT . Denne funktion returnerer som den er NULL hvis der ikke findes noget match.

Denne funktion virker kun med endimensionelle arrays.

Husk også, at array_search(NULL, a) returnerer altid NULL , selvom arrayet indeholder null-elementer:

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

Dette er fordi SQL betragter NULL =NULL at være ukendt (dvs. NULL ). Se funktionssammenligning . Hvis du vil have array_search for at kunne finde NULL elementer, ændre

 WHERE $2[i] =$1 

til

 HVOR $2[i] IKKE FORSKELLER FRA $1 


  1. Hvordan opdager man en tilbagerulning i MySQL-lagret procedure?

  2. Spring, MySQL og Hibernate:Databasefejl, hvis systemet ikke er brugt inden for 8 timer

  3. PostgreSQL IF-erklæring

  4. Forespørgsel forbliver i statistiktilstand i lang tid i Google Cloud SQL (MySQL 5.5)