sql >> Databáze >  >> RDS >> PostgreSQL

Nalezení pozice hodnoty v polích PostgreSQL

doporučuje dokumentace pomocí generate_subscripts funkce. Funkce níže emuluje array_search 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;

Vrátí index první shody, pokud existuje. Pokud chcete všechny shody, jednoduše změňte RETURNS INT na RETURNS SETOF INT . Tato funkce, jak je, vrací NULL pokud není nalezena žádná shoda.

Tato funkce funguje pouze s jednorozměrnými poli.

Také mějte na paměti, že array_search(NULL, a) vždy vrátí NULL , i když pole obsahuje prvky null:

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

(1 row)

Je to proto, že SQL považuje NULL = NULL být neznámý (tj. NULL ). Viz srovnání funkcí . Pokud chcete array_search abyste mohli najít NULL prvky, změnit

     WHERE $2[i] = $1

do

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


  1. Upozornění:Nedefinovaná vlastnost:stdClass::$user_id v C:\wamp\www\social\includes\class-query.php na řádku 134

  2. Seskupit SQLite podle/počítat hodiny, dny, týdny, rok

  3. Jak uložit překryvný tvar map Google do databáze?

  4. PDO Závažná chyba:Volání členské funkce Prepare() na jiném než objektu