Arrays y seriessolo PostgreSQL

ARRAY_POSITION

Encuentra el número del primer elemento del array con el valor indicado.

Sintaxis

ARRAY_POSITION(<array>, <valor>)
ARRAY_POSITIONS(<array>, <valor>)

Devuelve el número del elemento, contando desde 1, o NULL si el valor no está. ARRAY_POSITIONS devuelve los números de todas las coincidencias como un array. Útil para saber en qué lugar de una lista está un valor, por ejemplo, en un orden fijo de estados o prioridades.

Datos para los ejemplos

employees

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

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

En qué posición
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
Todas las coincidencias
SELECT ARRAY_POSITIONS(ARRAY['a', 'b', 'a', 'c', 'a'], 'a') AS positions;
positions
[1,3,5]
Ordenar en tu propio ordenAvanzado
SELECT name, department
FROM employees
ORDER BY ARRAY_POSITION(ARRAY['design', 'frontend', 'backend'], department), name;
namedepartment
Sophiadesign
Noahfrontend
Oliviafrontend
Emmabackend
Liambackend

Los departamentos no van por orden alfabético, sino en el orden que marca el array.

Ten en cuenta

Si no lo encuentra, da NULL, no 0 como POSITION en las cadenas. Comprueba IS NULL.

Solo para arrays de una dimensión: con ARRAY[[1, 2], [3, 4]] obtendrás searching for elements in multidimensional arrays is not supported.

Para comprobar simplemente si un valor está en el array, es más corto 'medium' = ANY(<array>).

Funciones relacionadas