sql >> Databasteknik >  >> RDS >> PostgreSQL

Hitta positionen för ett värde i PostgreSQL-matriser

dokumentationen rekommenderar med generate_subscripts fungera. Funktionen nedan emulerar PHP:s array_search :

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;

Detta returnerar indexet för den första matchningen, om det finns. Om du vill ha alla matchningar, ändra helt enkelt RETURNS INT till RETURNS SETOF INT . Denna funktion returnerar som den är NULL om ingen matchning hittas.

Denna funktion fungerar endast med endimensionella arrayer.

Tänk också på att array_search(NULL, a) returnerar alltid NULL , även om arrayen innehåller null-element:

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

(1 row)

Detta beror på att SQL anser NULL = NULL att vara okänd (dvs. NULL ). Se functions-comparison . Om du vill ha array_search för att kunna hitta NULL element, ändra

     WHERE $2[i] = $1

till

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


  1. PHP:mysql_connect returnerar inte FALSK

  2. Välj information från sista artikeln och gå med i det totala beloppet

  3. Hur får jag kolumnnamn från en given MySQL-tabell?

  4. Mysql Databas design struktur