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

299
Views
no se puede hacer una cláusula where con jooq DSL en Kotlin/Java

Estoy tratando de ejecutar una consulta de la siguiente forma con jooq en Kotlin:

 val create = DSL.using(SQLDialect.POSTGRES) val query: Query = create.select().from(DSL.table(tableName)) .where(DSL.field("timestamp").between("1970-01-01T00:00:00Z").and("2021-11-05T00:00:00Z")) .orderBy(DSL.field("id").desc())

El código de arriba me da:

 syntax error at or near \"and\

Además, al observar esta consulta en el depurador, query.sql muestra como:

 select * from data_table where timestamp between ? and ? order by id desc

No estoy seguro si el ? indica que no pudo representar los valores en SQL o de alguna manera son algún tipo de marcadores de posición.

Además, el código funciona sin la cadena where .

Además, en la línea de comando de Postgres puedo ejecutar lo siguiente y la consulta se ejecuta:

 select * from data_table where timestamp between '1970-01-01T00:00:00Z' and '2021-11-05T00:00:00Z' order by id

Al consultar los tipos de datos en el esquema, el tipo de columna de timestamp de tiempo se representa como timestamp without time zone .

Antes había declarado variables como:

 val lowFilter = "1970-01-01T00:00:00Z" val highFilter = "2021-11-05T00:00:00Z"

y esto no funcionó y parece que pasar cadenas sin procesar tampoco funciona. Soy muy nuevo en esto, así que estoy bastante seguro de que estoy estropeando el uso aquí.

EDITAR Siguiendo la sugerencia de @nulldroid, hizo algo como:

 .where(DSL.field("starttime").between(DSL.timestamp("1970-01-01T00:00:00Z")).and(DSL.timestamp("2021-11-05T00:00:00Z")))

y esto resultó en:

 Type class org.jooq.impl.Val is not supported in dialect POSTGRES"
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

No usar el generador de código:

Voy a suponer que tiene una buena razón para no usar el generador de código para esta consulta en particular, la razón principal suele ser que su esquema es dinámico.

Entonces, la forma correcta de escribir su consulta es esta:

 create.select() .from(DSL.table(tableName)) // Attach a DataType to your timestamp field, to let jOOQ know about this .where(DSL.field("timestamp", SQLDataType.OFFSETDATETIME) // Use bind values of a temporal type .between(OffsetDateTime.parse("1970-01-01T00:00:00Z")) .and(OffsetDateTime.parse("2021-11-05T00:00:00Z"))) .orderBy(DSL.field("id").desc())

Observe cómo estoy usando tipos de datos temporales reales, no cadenas para comparar fechas y declarar campos.

Supongo, según las marcas de tiempo UTC de su pregunta, que está usando TIMESTAMPTZ . De lo contrario, si está utilizando TIMESTAMP , simplemente reemplace OffsetDateTime por LocalDateTime ...

Usando el generador de código

Si usa el generador de código, que siempre se recomienda si su esquema no es dinámico, escribiría casi lo mismo que arriba, pero escriba con seguridad:

 create.select() .from(MY_TABLE) // Attach a DataType to your timestamp field, to let jOOQ know about this .where(MY_TABLE.TIMESTAMP // Use bind values of a temporal type .between(OffsetDateTime.parse("1970-01-01T00:00:00Z")) .and(OffsetDateTime.parse("2021-11-05T00:00:00Z"))) .orderBy(MY_TABLE.ID.desc())
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!