jOOQ
Campo .adicionar()
é inspirado na interpretação da Oracle de DATE + NUMBER
... onde
NUMBER
(se um Inteiro
ou Duplo
) é um número de dias. O que você quer é o equivalente a adicionar um padrão SQL INTERVAL YEAR TO MONTH
a uma determinada data. Isso pode ser feito usando jOOQ YearToMonth tipo de intervalo
, se você quiser adicionar um intervalo constante. O AnoParaMês
type também estende java.lang.Number
, e também pode ser usado com Field.add()
, intuitivamente. Embora seja possível gerar um
Field
através da API jOOQ 3.2 existente, acredito que será melhor recorrer apenas ao SQL simples, possivelmente criando um método reutilizável: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);
}
Isso pode ser uma adição de recurso útil para #2727 também...
Infelizmente, as interpretações dos vários dialetos SQL da aritmética de data e hora são difíceis de padronizar. Estamos constantemente melhorando as coisas lá, mas muitas vezes, o SQL simples é a melhor maneira de escrever expressões aritméticas de data e hora específicas do dialeto.