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

194
Vistas
sql, javax.persistence.criteria: verifique una columna de la tabla de la base de datos con valores de cadena separados por comas contra una lista de cadenas

Tengo una columna de tabla de base de datos con valores de cadena separados por comas como este:

 id mycolumn -- -------- 1 A 2 A, B 3 A, B, C

No puedo cambiar esto, porque es una base de datos personalizada antigua.

Quiero comprobar mycolumn contra una lista de cadenas:

la primera consulta contra la lista ['A'] debe devolver el registro 1

la segunda consulta contra la lista ['A', 'B'] debe devolver los registros 1,2

la tercera consulta contra la lista ['A', 'B', 'C'] debe devolver los registros 1,2,3

Necesito una declaración sql (postgres) y además una implementación de java con javax.persistence.criteria.CriteriaBuilder y javax.persistence.criteria.Predicate .

Muchas gracias por tus consejos, Ana.

editar: Aquí mi solución para la parte javax.persitence:

 public static void arrayContains(final CriteriaBuilder cb, final List<Predicate> where, final Expression<String> expression, final String values) { Expression<String> expressionValues = cb.function("string_to_array", String.class, cb.literal(values), cb.literal(", ")); Expression<String> expressionDb = cb.function("string_to_array", String.class, expression, cb.literal(", ")); where.add(cb.isTrue(cb.function("arraycontains", Boolean.class, expressionValues, expressionDb))); }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En PostgreSQL use string_to_array(mycolumn,',') en la cláusula WHERE con el operador de contención <@ , por ejemplo

 SELECT * FROM t WHERE string_to_array(mycolumn,',') <@ ARRAY['A','B','C']

Tenga en cuenta que debe crear un índice que corresponda a esta condición, en caso de que esté tratando con una tabla grande, por ejemplo, un índice GIN .

 CREATE INDEX idx_t_mycolumn_gin ON t USING gin (string_to_array(mycolumn,','));

Demostración: db<>fiddle

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