jOOQs Fält .add()
Metoden är inspirerad av Oracles tolkning av
DATE + NUMBER
... där NUMBER
(om ett Heltal
eller Dubbel
) är ett antal dagar. Det du vill ha är att lägga till en SQL-standard INTERVAL YEAR TO MONTH
till ett givet datum. Detta kan uppnås genom att använda jOOQs YearToMonth intervalltyp
, om du vill lägga till ett konstant intervall. YearToMonth
typ utökar också java.lang.Number
, och kan därmed även användas med Field.add()
, intuitivt.
Även om det kan vara möjligt att generera ett sådant Fält
genom befintligt jOOQ 3.2 API tror jag att du kommer att bli bättre av att bara ta till vanlig SQL, möjligen genom att skapa en återanvändbar metod:
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);
}
Detta kan vara en användbar funktionstillägg för #2727 likaså...
Tyvärr är de olika SQL-dialekternas tolkningar av aritmetiken för datum och tid svåra att standardisera. Vi förbättrar hela tiden saker där, men ofta är vanlig SQL det bästa sättet att skriva dialektspecifika aritmetiska uttryck för datum och tid.