PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Намиране на позицията на стойност в масиви на PostgreSQL

документацията препоръчва използвайки generate_subscripts функция. Функцията по-долу емулира 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;

Това връща индекса на първото съвпадение, ако има такова. Ако искате всички съвпадения, просто променете RETURNS INT към RETURNS SETOF INT . Тази функция, както е, връща NULL ако не бъде намерено съвпадение.

Тази функция работи само с едномерни масиви.

Освен това имайте предвид, че array_search(NULL, a) винаги връща NULL , дори ако масивът съдържа нулеви елементи:

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

(1 row)

Това е така, защото SQL счита NULL = NULL да бъде неизвестен (т.е. NULL ). Вижте сравнение на функции . Ако искате array_search за да можете да намерите NULL елементи, промяна

     WHERE $2[i] = $1

до

     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. Postgres разделен низ с двойни кавички на множество редове?

  2. Как да дефинирам псевдоним на оператор в PostgreSQL?

  3. Postgres - Как да конвертирате ред с int диапазон в междинни редове от отделни стойности от този диапазон?

  4. Как да изберете от променлива, която е име на таблица n Postgre>=9.2

  5. Индекс на клеймото за време:Функциите в индексния израз трябва да бъдат маркирани като НЕИЗМЕНЯЕМИ