La Tabla 9.51 muestra los operadores especializados disponibles para los tipos de arreglos. Además de estos, los operadores de comparación habituales que se muestran en la Tabla 9.1 están disponibles para arreglos. Los operadores de comparación comparan el contenido de la matriz elemento por elemento, utilizando la función de comparación de árbol B predeterminada para el tipo de datos del elemento, y ordenan según la primera diferencia. En matrices multidimensionales, los elementos se visitan en orden de fila principal (el último subíndice varía más rápidamente). Si el contenido de dos matrices es igual pero la dimensionalidad es diferente, la primera diferencia en la información de dimensionalidad determina el orden de clasificación. (Este es un cambio con respecto a las versiones de PostgreSQL anteriores a la 8.2: las versiones anteriores afirmarían que dos matrices con el mismo contenido eran iguales, incluso si el número de dimensiones o rangos de subíndices fueran diferentes).

Cuadro 9.51. Operadores de matrices

Operador

Descripción

Ejemplo (s)

anyarray @> anyarrayboolean

¿La primera matriz contiene la segunda, es decir, cada elemento que aparece en la segunda matriz es igual a algún elemento de la primera matriz? (Los duplicados no se tratan de forma especial, por lo que ARRAY[1] y ARRAY[1,1] se considera que cada uno contiene al otro.)

ARRAY[1,4,3] @> ARRAY[3,1,3]t

anyarray <@ anyarrayboolean

¿La primera matriz está contenida en la segunda?

ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6]t

anyarray && anyarrayboolean

¿Se superponen las matrices, es decir, tienen elementos en común?

ARRAY[1,4,3] && ARRAY[2,1]t

anyarray || anyarrayanyarray

Concatena las dos matrices. Concatenar una matriz nula o vacía no es una operación; de lo contrario, las matrices deben tener el mismo número de dimensiones (como se ilustra en el primer ejemplo) o diferir en el número de dimensiones en uno (como se ilustra en el segundo).

ARRAY[1,2,3] || ARRAY[4,5,6,7]{1,2,3,4,5,6,7}

ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]]{{1,2,3},{4,5,6},{7,8,9}}

anyelement || anyarrayanyarray

Concatena un elemento al frente de una matriz (que debe estar vacía o unidimensional).

3 || ARRAY[4,5,6]{3,4,5,6}

anyarray || anyelementanyarray

Concatena un elemento al final de una matriz (que debe estar vacía o unidimensional).

ARRAY[4,5,6] || 7{4,5,6,7}

Consulte la Sección 8.15 para obtener más detalles sobre el comportamiento del operador de matriz. Consulte la Sección 11.2 para obtener más detalles sobre qué operadores admiten operaciones indexadas.

La Tabla 9.52 muestra las funciones disponibles para usar con tipos de arreglos. Consulte la Sección 8.15 para obtener más información y ejemplos del uso de estas funciones.

Cuadro 9.52. Funciones de matriz

Función

Descripción

Ejemplo (s)

array_append ( anyarray, anyelement ) → anyarray

Agrega un elemento al final de una matriz (igual que el anyarray || anyelement operador).

array_append(ARRAY[1,2], 3){1,2,3}

array_cat ( anyarray, anyarray ) → anyarray

Concatena dos matrices (igual que el anyarray || anyarray operador).

array_cat(ARRAY[1,2,3], ARRAY[4,5]){1,2,3,4,5}

array_dims ( anyarray ) → text

Devuelve una representación de texto de las dimensiones de la matriz.

array_dims(ARRAY[[1,2,3], [4,5,6]])[1:2][1:3]

array_fill ( anyelement, integer[] [, integer[] ]) → anyarray

Devuelve una matriz llena de copias del valor dado, con dimensiones de las longitudes especificadas por el segundo argumento. El tercer argumento opcional proporciona valores de límite inferior para cada dimensión (que por defecto son todos 1).

array_fill(11, ARRAY[2,3]){{11,11,11},{11,11,11}}

array_fill(7, ARRAY[3], ARRAY[2])[2:4]={7,7,7}

array_length ( anyarray, integer ) → integer

Devuelve la longitud de la dimensión de matriz solicitada.

array_length(array[1,2,3], 1)3

array_lower ( anyarray, integer ) → integer

Devuelve el límite inferior de la dimensión de matriz solicitada.

array_lower('[0:2]={1,2,3}'::integer[], 1)0

array_ndims ( anyarray ) → integer

Devuelve el número de dimensiones de la matriz.

array_ndims(ARRAY[[1,2,3], [4,5,6]])2

array_position ( anyarray, anyelement [, integer ] ) → integer

Devuelve el subíndice de la primera aparición del segundo argumento en la matriz, o NULL si no está presente. Si se da el tercer argumento, la búsqueda comienza en ese subíndice. La matriz debe ser unidimensional. Las comparaciones se realizan usando IS NOT DISTINCT FROM semántica, por lo que es posible buscar NULL.

array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon')2

array_positions ( anyarray, anyelement ) → integer[]

Devuelve una matriz de los subíndices de todas las apariciones del segundo argumento en la matriz dada como primer argumento. La matriz debe ser unidimensional. Las comparaciones se realizan usando IS NOT DISTINCT FROM semántica, por lo que es posible buscar NULL. NULL se devuelve solo si la matriz es NULL; si el valor no se encuentra en la matriz, se devuelve una matriz vacía.

array_positions(ARRAY['A','A','B','A'], 'A'){1,2,4}

array_prepend ( anyelement, anyarray ) → anyarray

Antepone un elemento al principio de una matriz (igual que el anyelement || anyarray operador).

array_prepend(1, ARRAY[2,3]){1,2,3}

array_remove ( anyarray, anyelement ) → anyarray

Elimina todos los elementos iguales al valor dado de la matriz. La matriz debe ser unidimensional. Las comparaciones se realizan usando IS NOT DISTINCT FROM semántica, por lo que es posible eliminar NULLs.

array_remove(ARRAY[1,2,3,2], 2){1,3}

array_replace ( anyarray, anyelement, anyelement ) → anyarray

Reemplaza cada elemento de la matriz igual al segundo argumento con el tercer argumento.

array_replace(ARRAY[1,2,5,4], 5, 3){1,2,3,4}

array_to_string ( array anyarray, delimiter text [, null_string text ] ) → text

Convierte cada elemento de la matriz en su representación de texto y concatena los separados por delimiter cuerda. Si null_string se da y no es NULL, luego NULL las entradas de la matriz están representadas por esa cadena; de lo contrario, se omiten.

array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5

array_upper ( anyarray, integer ) → integer

Devuelve el límite superior de la dimensión de matriz solicitada.

array_upper(ARRAY[1,8,3,7], 1)4

cardinality ( anyarray ) → integer

Devuelve el número total de elementos de la matriz o 0 si la matriz está vacía.

cardinality(ARRAY[[1,2],[3,4]])4

string_to_array ( string text, delimiter text [, null_string text ] ) → text[]

Divide el string en ocurrencias de delimiter y forma los datos restantes en un text formación. Si delimiter es NULL, cada personaje en el string se convertirá en un elemento separado de la matriz. Si delimiter es una cadena vacía, entonces el string se trata como un solo campo. Si null_string se suministra y no se NULL, los campos que coinciden con esa cadena se convierten a NULL entradas.

string_to_array('xx~~yy~~zz', '~~', 'yy'){xx,NULL,zz}

unnest ( anyarray ) → setof anyelement

Expande una matriz en un conjunto de filas. Los elementos de la matriz se leen en orden de almacenamiento.

unnest(ARRAY[1,2])

 1
 2

unnest(ARRAY[['foo','bar'],['baz','quux']])

 foo
 bar
 baz
 quux

unnest ( anyarray, anyarray [, … ] ) → setof anyelement, anyelement [, ... ]

Expande múltiples matrices (posiblemente de diferentes tipos de datos) en un conjunto de filas. Si las matrices no tienen la misma longitud, las más cortas se rellenan con NULLs. Este formulario solo está permitido en la cláusula FROM de una consulta; consulte la Sección 7.2.1.4.

select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b)

 a |  b
---+-----
 1 | foo
 2 | bar
   | baz

Nota

Hay dos diferencias en el comportamiento de string_to_array de versiones anteriores a la 9.1 de PostgreSQL. Primero, devolverá una matriz vacía (elemento cero) en lugar de NULL cuando la cadena de entrada es de longitud cero. En segundo lugar, si la cadena delimitadora es NULL, la función divide la entrada en caracteres individuales, en lugar de devolver NULL como antes.

Consulte también la Sección 9.21 sobre la función agregada array_agg para usar con matrices.

Anterior

Hasta próximo
9.18. Expresiones condicionales Hogar 9,20. Funciones y operadores de rango