Вы используете довольно много специфических для c функций поставщика, которые не поддерживаются "из коробки" в jOOQ. Как всегда, когда вы сталкиваетесь с этой ситуацией, вы можете свернуть свою собственную поддержку, используя plain SQL templating , в идеале, создав собственную библиотеку:
public static Field<Timestamp> fromUnixtime(Field<? extends Number> field) {
return field("from_unixtime({0})", SQLDataType.TIMESTAMP, field);
}
public static Field<Timestamp> convertTz(
Field<Timestamp> field,
Field<String> fromTz,
Field<String> toTz
) {
return field("convert_tz({0}, {1}, {2})", SQLDataType.TIMESTAMP, field, fromTz, toTz);
}
public static Field<String> sessionTimeZone() {
return field("@@session.time_zone", SQLDataType.VARCHAR);
}
Теперь вы можете используйте его следующим образом:
dsl.select(convertTz(
fromUnixtime(TRANSACTION.CREATION_DATE),
sessionTimeZone(),
inline("Europe/Berlin"))
)
.from(TRANSACTION)
.fetch();
Или сделайте еще один шаг и оберните все эти выражения в еще одну вспомогательную функцию, например, такую:
public static Field<Timestamp> fromUnixtimeToBerlinTZ(Field<? extends Number> field) {
return convertTz(
fromUnixtime(TRANSACTION.CREATION_DATE),
sessionTimeZone(),
inline("Europe/Berlin")
);
}
Все эти примеры предполагаем обычные данные c import:
import static org.jooq.impl.DSL.*;