jOOQ's Felt .add()
metode er inspireret af Oracles fortolkning af
DATE + NUMBER
... hvor NUMBER
(hvis et Heltal
eller Dobbelt
) er et antal dage. Det, du ønsker, svarer til at tilføje en SQL-standard INTERVAL ÅR TIL MÅNED
til en given dato. Dette kunne opnås ved at bruge jOOQs YearToMonth intervaltype
, hvis du vil tilføje et konstant interval. YearToMonth
type udvider også java.lang.Number
, og kan således også bruges med Field.add()
, intuitivt.
Selvom det måske er muligt at generere sådan et felt
gennem eksisterende jOOQ 3.2 API tror jeg, at du vil være bedre stillet til blot at ty til almindelig SQL, muligvis ved at oprette en genbrugelig metode:
public static <T extends java.util.Date>
Field<T> dateInCurrentYear(Field<T> field) {
return DSL.field("DATE_ADD({0}, INTERVAL YEAR(CURDATE()) - YEAR({0}) YEAR)",
field.getDataType(),
field);
}
Dette kan være en nyttig tilføjelse af funktioner til #2727 også...
Desværre er de forskellige SQL-dialekters fortolkninger af dato-tidsregning svære at standardisere. Vi forbedrer konstant tingene der, men ofte er almindelig SQL den bedste måde at skrive dialektspecifikke aritmetiske udtryk for dato og klokkeslæt.