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.