PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Znajdowanie pozycji wartości w tablicach PostgreSQL

dokumentacja zaleca za pomocą generate_subscripts funkcjonować. Poniższa funkcja 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;

Zwraca indeks pierwszego dopasowania, jeśli jest obecny. Jeśli chcesz wszystkie dopasowania, po prostu zmień RETURNS INT do RETURNS SETOF INT . Ta funkcja, jak jest, zwraca NULL jeśli nie zostanie znalezione dopasowanie.

Ta funkcja działa tylko z tablicami jednowymiarowymi.

Pamiętaj też, że array_search(NULL, a) zawsze zwraca NULL , nawet jeśli tablica zawiera elementy null:

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

(1 row)

Dzieje się tak, ponieważ SQL uwzględnia NULL = NULL być nieznanym (np. NULL ). Zobacz porównanie funkcji . Jeśli chcesz array_search aby móc znaleźć NULL elementy, zmień

     WHERE $2[i] = $1

do

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. hibernacja - Postgres- listy docelowe mogą mieć maksymalnie 1664 wpisów

  2. Odpowiednik Group_concat w postgresql 8.2.11

  3. postgresql unikatowe ograniczenie dla dowolnej liczby całkowitej z dwóch kolumn (lub z tablicy)

  4. PGError:ERROR:agregacje niedozwolone w klauzuli WHERE w zapytaniu AR obiektu i jego obiektów has_many

  5. Śledź zewnętrzną bazę danych z Heroku