Cómo seleccionar marca de tiempo Unix como la fecha en Jooq?

Anna Ira Hurnaus:

Estoy trabajando con una base de datos en la que las fechas se almacenan como tiempo Unix (segundo desde 1970). Tengo el siguiente código SQL que funciona como se esperaba:

select CONVERT_TZ(FROM_UNIXTIME(creation_date), @@session.time_zone, "Europe/Berlin")
from transaction; 

Así es como he tratado de hacerlo en Jooq:

dsl.select(DSL.date(TRANSACTION.CREATION_DATE) // This does not work
   .from(TRANSACTION)
   .fetch();
Lukas Eder:

Usted está utilizando un buen número de funciones específicas del proveedor allí, que no son compatibles fuera de la caja en jOOQ. Como siempre, cuando se encuentra con esta situación, se puede rodar su propio apoyo mediante el uso de plantillas de SQL normal , idealmente mediante la construcción de su propia biblioteca:

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);
}

Ahora, se puede utilizar de esta manera:

dsl.select(convertTz(
        fromUnixtime(TRANSACTION.CREATION_DATE), 
        sessionTimeZone(), 
        inline("Europe/Berlin"))
   )
   .from(TRANSACTION)
   .fetch();

O bien, tomar un paso más allá y envolver todas estas expresiones en otra función auxiliar, como éste:

public static Field<Timestamp> fromUnixtimeToBerlinTZ(Field<? extends Number> field) {
    return convertTz(
        fromUnixtime(TRANSACTION.CREATION_DATE), 
        sessionTimeZone(), 
        inline("Europe/Berlin")
    );
}

Todos estos ejemplos están asumiendo la importación estática habitual:

import static org.jooq.impl.DSL.*;

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=364539&siteId=1
Recomendado
Clasificación