Поле на jOOQ .add()
методът е вдъхновен от интерпретацията на Oracle на
DATE + NUMBER
... където NUMBER
(ако Цяло число
или Двойно
) е брой дни. Това, което искате, е еквивалентно на добавяне на SQL стандарт ИНТЕРВАЛ ГОДИНА ДО МЕСЕЦ
до определена дата. Това може да се постигне чрез използване на jOOQ на YearToMonthкод> тип интервал
, ако искате да добавите постоянен интервал. YearToMonth
type също така разширява java.lang.Number
, и по този начин може да се използва и с Field.add()
, интуитивно.
Въпреки че може да е възможно да се генерира такова Поле
чрез съществуващия API на jOOQ 3.2 вярвам, че ще бъде по-добре просто да прибягвате до обикновен SQL, вероятно чрез създаване на метод за многократна употреба:
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);
}
Това може да е полезно допълнение към функцията за #2727 също...
За съжаление, интерпретациите на различните SQL диалекти на аритметиката за дата и час е трудно да се стандартизират. Постоянно подобряваме нещата там, но често обикновеният SQL е най-добрият начин за писане на специфични за диалекта аритметични изрази за дата и час.