Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

192
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!