Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

569
Vistas
El operador IN de Postgres genera ERROR: error de sintaxis en o cerca de array_variable

Estoy haciendo una function y una de mis características es hacer uso del operador SQL IN . Básicamente me gustaría una consulta como esta

 select name from atlas_ins_th_travel_place pp where pp.name IN ('Guyana', 'Mexico');

Luego hago function y acepto varchar[] como una entrada como esta

 CREATE OR REPLACE FUNCTION test_place( places VARCHAR[] ) RETURNS SETOF test_place_view AS $$ DECLARE dummy ALIAS FOR $1; BEGIN -- FOR i IN 1 .. array_upper(places, 1) -- LOOP -- RAISE NOTICE '%', places[i]; -- single quotes! -- array_append(dummy, places[i]) -- END LOOP; RETURN QUERY select name from atlas_ins_th_travel_place where name in places; END; $$ LANGUAGE plpgsql STABLE;

Desafortunadamente, genera el error con respecto al operator . He intentado hacer una nueva matriz y usarla. pero no ayuda

Pregunta:

¿Cómo usar el operador IN con array ?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Necesita usar el operador ANY para esto. IN funciona con Listas, ANY funciona con Arrays select name from table where name = ANY(places)

over 4 years ago · Santiago Trujillo Denunciar

0

El operador IN solo admite listas. No admite la búsqueda en una matriz. Deberías usar operator = ANY() .

 postgres=# select 10 = ANY(ARRAY[10,20,30]); ┌──────────┐ │ ?column? │ ╞══════════╡ │ t │ └──────────┘ (1 row) postgres=# select 11 = ANY(ARRAY[10,20,30]); ┌──────────┐ │ ?column? │ ╞══════════╡ │ f │ └──────────┘ (1 row)

o tal vez puede usar una función array_position (pero no se usarán estadísticas):

 postgres=# select array_position(ARRAY[10,2,3], 10); ┌────────────────┐ │ array_position │ ╞════════════════╡ │ 1 │ └────────────────┘ (1 row) postgres=# select array_position(ARRAY[10,2,3], 11); ┌────────────────┐ │ array_position │ ╞════════════════╡ │ ∅ │ └────────────────┘ (1 row)

Si una matriz es pequeña (< 100), entonces no es demasiado importante lo que use. Para matrices más grandes, probablemente sea mejor usar un operador. Pero depende del contexto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda