Field .add()
metoda jest inspirowana interpretacją Oracle
DATE + NUMBER
... gdzie LICZBA
(jeśli liczba całkowita
lub Podwójny
) to liczba dni. To, czego potrzebujesz, jest odpowiednikiem dodania standardowego SQL PRZEKRES ROK DO MIESIĄCA
do określonej daty. Można to osiągnąć za pomocą YearToMonth typ interwału
, jeśli chcesz dodać stały odstęp. YearToMonth
typ również rozszerza java.lang.Number
, i dlatego może być również używany z Field.add()
, intuicyjnie.
Chociaż może być możliwe wygenerowanie takiego Pola
poprzez istniejące API jOOQ 3.2, uważam, że lepiej będzie po prostu uciec się do zwykłego SQL, prawdopodobnie tworząc metodę wielokrotnego użytku:
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);
}
Może to być przydatny dodatek do #2727 jak również...
Niestety, interpretacje arytmetyki daty i czasu w różnych dialektach SQL są trudne do ujednolicenia. Stale ulepszamy tam rzeczy, ale często zwykły SQL jest najlepszym sposobem na pisanie wyrażeń arytmetycznych daty i godziny specyficznych dla dialektu.