Saltar al contenido

Comprobar si existe valor en Postgres array

La guía o código que encontrarás en este post es la resolución más eficiente y efectiva que hallamos a esta duda o dilema.

Solución:

más sencillo con el ANY construir:

SELECT value_variable = ANY ('1,2,3'::int[])

El operando derecho de ANY (entre paréntesis) puede ser un colocar (resultado de una subconsulta, por ejemplo) o una array. Hay varias formas de usarlo:

  • SQLAlchemy: ¿cómo filtrar en los tipos de columna PgArray?
  • IN vs CUALQUIER operador en PostgreSQL

Importante diferencia: operadores de matriz (<@, @>, && et al.) esperar array tipos como operandos y admiten índices GIN o GiST en la distribución estándar de PostgreSQL, mientras que el ANY la construcción espera un elemento escriba como operando izquierdo y no admite estos índices. Ejemplo:

  • Índice para encontrar un elemento en un JSON array

Nada de esto sirve para NULL elementos. para probar NULL:

  • Comprobar si NULL existe en Postgres array

Cuidado con la trampa en la que me metí: al verificar si cierto valor no está presente en un arrayno deberías hacer:

SELECT value_variable != ANY('1,2,3'::int[])

pero uso

SELECT value_variable != ALL('1,2,3'::int[])

en lugar de.

pero si tienes otras formas de hacerlo por favor comparte.

Puede comparar dos matrices. Si alguno de los valores de la izquierda array superponer los valores a la derecha arrayluego vuelve true. Es un poco hackish, pero funciona.

SELECT '1'   && '1,2,3'::int[];  -- true
SELECT '1,4' && '1,2,3'::int[];  -- true
SELECT '4'   && '1,2,3'::int[];  -- false
  • En la primera y segunda consulta, valor 1 está en la derecha array
  • Observe que la segunda consulta es trueaunque el valor 4 no está contenido en el derecho array
  • Para la tercera consulta, no hay valores a la izquierda array (es decir, 4) están en la derecha arraypor lo que vuelve false

Si piensas que ha resultado de ayuda nuestro post, sería de mucha ayuda si lo compartieras con el resto entusiastas de la programación así nos ayudas a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *