Feld von jOOQ .add()
-Methode ist von Oracles Interpretation von
DATE + NUMBER
... wobei ZAHL
(wenn eine Integer
oder Doppelt
) ist eine Anzahl von Tagen. Was Sie wollen, ist das Äquivalent zum Hinzufügen eines SQL-Standards INTERVAL YEAR TO MONTH
zu einem bestimmten Datum. Dies könnte durch die Verwendung von jOOQs YearToMonth Intervalltyp
, wenn Sie ein konstantes Intervall hinzufügen möchten. Das YearToMonth
type erweitert auch java.lang.Number
, und kann somit auch mit Field.add()
, intuitiv.
Es ist zwar möglich, ein solches Field
zu generieren Durch die vorhandene jOOQ 3.2-API glaube ich, dass Sie besser dran sind, einfach auf einfaches SQL zurückzugreifen, möglicherweise durch die Erstellung einer wiederverwendbaren Methode:
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);
}
Dies könnte eine nützliche Funktionserweiterung für #2727 sein auch...
Leider ist die Interpretation der Datums-Zeit-Arithmetik durch die verschiedenen SQL-Dialekte schwer zu standardisieren. Wir verbessern die Dinge dort ständig, aber häufig ist einfaches SQL der beste Weg, um dialektspezifische arithmetische Ausdrücke für Datum und Uhrzeit zu schreiben.