pole jOOQ .add()
metoda je inspirována výkladem
DATE + NUMBER
... kde NUMBER
(pokud je Celé číslo
nebo Double
) je počet dní. To, co chcete, je ekvivalent přidání standardu SQL INTERVAL YEAR TO MONTH
k danému datu. Toho lze dosáhnout pomocí jOOQ YearToMonth typ intervalu
, pokud jste chtěli přidat konstantní interval. YearToMonth
type také rozšiřuje java.lang.Number
, a lze je tedy použít také s Field.add()
, intuitivně.
I když by mohlo být možné vygenerovat takové Pole
prostřednictvím stávajícího jOOQ 3.2 API se domnívám, že bude lepší, když se uchýlíte k prostému SQL, případně vytvořením znovu použitelné metody:
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);
}
Toto může být užitečný doplněk funkce pro #2727 také...
Bohužel je obtížné standardizovat různé interpretace aritmetiky data a času v různých dialektech SQL. Neustále věci vylepšujeme, ale obyčejné SQL je často nejlepší způsob, jak psát aritmetické výrazy pro datum a čas specifické pro dialekt.