Champ .add()
méthode est inspirée de l'interprétation d'Oracle de
DATE + NUMBER
... où NOMBRE
(si un Entier
ou Double
) est un nombre de jours. Ce que vous voulez est l'équivalent de l'ajout d'un standard SQL INTERVAL YEAR TO MONTH
à une date donnée. Cela pourrait être réalisé en utilisant YearToMonth type d'intervalle
, si vous vouliez ajouter un intervalle constant. Le YearToMonth
le type étend également java.lang.Number
, et peut donc également être utilisé avec Champ.add()
, intuitivement.
Bien qu'il soit possible de générer un tel Field
grâce à l'API jOOQ 3.2 existante, je pense que vous feriez mieux de recourir simplement au SQL brut, éventuellement en créant une méthode réutilisable :
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);
}
Cela pourrait être un ajout de fonctionnalité utile pour #2727 aussi...
Malheureusement, les interprétations des différents dialectes SQL de l'arithmétique date-heure sont difficiles à standardiser. Nous améliorons constamment les choses, mais souvent, le SQL simple est le meilleur moyen d'écrire des expressions arithmétiques de date et d'heure spécifiques au dialecte.