jOOQ's Field.add()
methode is geïnspireerd op Oracle's interpretatie van
DATE + NUMBER
... waar NUMBER
(indien een Integer
of Double
) is een aantal dagen. Wat je wilt is het equivalent van het toevoegen van een SQL-standaard INTERVAL YEAR TO MONTH
tot een bepaalde datum. Dit kan worden bereikt door het gebruik van jOOQ's YearToMonth
intervaltype
, als u een constant interval wilt toevoegen. De YearToMonth
type breidt ook java.lang.Number
uit , en kan dus ook worden gebruikt met Field.add()
, intuïtief.
Hoewel het mogelijk zou kunnen zijn om zo'n Field<YearToMonth>
. te genereren via de bestaande jOOQ 3.2 API geloof ik dat je beter af bent met gewone SQL, mogelijk door een herbruikbare methode te creëren:
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);
}
Dit kan een handige toevoeging zijn voor #2727 ook...
Helaas is de interpretatie van datum-tijdberekeningen door de verschillende SQL-dialecten moeilijk te standaardiseren. We verbeteren daar voortdurend dingen, maar vaak is gewone SQL de beste manier om dialectspecifieke rekenkundige uitdrukkingen voor datum en tijd te schrijven.