Campo di jOOQ .add()
si ispira all'interpretazione di Oracle di
DATE + NUMBER
... dove NUMERO
(se un Intero
o Doppio
) è un numero di giorni. Quello che vuoi è l'equivalente di aggiungere uno standard SQL INTERVAL YEAR TO MONTH
ad una data data. Ciò può essere ottenuto utilizzando YearToMonth tipo di intervallo
, se si desidera aggiungere un intervallo costante. Il AnnoToMese
type estende anche java.lang.Number
, e può quindi essere utilizzato anche con Field.add()
, intuitivamente.
Anche se potrebbe essere possibile generare un tale Field
attraverso l'API jOOQ 3.2 esistente, credo che sarà meglio ricorrere al semplice SQL, possibilmente creando un metodo riutilizzabile:
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);
}
Questa potrebbe essere un'utile aggiunta di funzionalità per #2727 anche...
Sfortunatamente, le interpretazioni dei vari dialetti SQL dell'aritmetica della data e dell'ora sono difficili da standardizzare. Qui miglioriamo costantemente le cose, ma spesso un semplice SQL è il modo migliore per scrivere espressioni aritmetiche di data e ora specifiche del dialetto.