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.