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
true
aunque el valor4
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 vuelvefalse
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.