Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda