Масиви й серіїлише PostgreSQL

ARRAY_POSITION

Знаходить номер першого елемента масиву з заданим значенням.

Синтаксис

ARRAY_POSITION(<масив>, <значення>)
ARRAY_POSITIONS(<масив>, <значення>)

Повертає номер елемента, рахуючи з 1, або NULL, якщо значення нема. ARRAY_POSITIONS повертає номери всіх збігів масивом. Зручно, щоб дізнатися, на якому місці значення в списку, — наприклад, у заданому порядку статусів чи пріоритетів.

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

На якому місці
SELECT ARRAY_POSITION(ARRAY['low', 'medium', 'high'], 'medium') AS medium_position,
ARRAY_POSITION(ARRAY['low', 'medium', 'high'], 'urgent') AS not_found;
medium_positionnot_found
2NULL
Усі збіги
SELECT ARRAY_POSITIONS(ARRAY['a', 'b', 'a', 'c', 'a'], 'a') AS positions;
positions
[1,3,5]
Сортування у своєму порядкуСкладніше
SELECT name, department
FROM employees
ORDER BY ARRAY_POSITION(ARRAY['design', 'frontend', 'backend'], department), name;
namedepartment
Sophiadesign
Noahfrontend
Oliviafrontend
Emmabackend
Liambackend

Відділи йдуть не за абеткою, а в порядку, заданому масивом.

Зверни увагу

Не знайшло — NULL, а не 0, як у POSITION для рядків. Перевіряй IS NULL.

Лише для одновимірних масивів: для ARRAY[[1, 2], [3, 4]] буде помилка searching for elements in multidimensional arrays is not supported.

Щоб просто перевірити, чи є значення в масиві, коротше 'medium' = ANY(<масив>).

Схожі функції