Field de jOOQ .add()
El método está inspirado en la interpretación de Oracle de
DATE + NUMBER
... donde NÚMERO
(si es un Integer
o Doble
) es un número de días. Lo que desea es el equivalente de agregar un estándar SQL INTERVALO DE AÑO A MES
a una fecha dada. Esto podría lograrse mediante el uso de YearToMonth tipo de intervalo
, si desea agregar un intervalo constante. El AñoAMes
type también extiende java.lang.Number
, y por lo tanto también se puede usar con Campo.añadir()
, intuitivamente.
Si bien podría ser posible generar tal Field
a través de la API jOOQ 3.2 existente, creo que será mejor que recurra a SQL simple, posiblemente creando un método reutilizable:
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);
}
Esta podría ser una función adicional útil para #2727 también...
Desafortunadamente, las interpretaciones de la aritmética de fecha y hora de los diversos dialectos SQL son difíciles de estandarizar. Estamos constantemente mejorando las cosas allí, pero a menudo, SQL simple es la mejor manera de escribir expresiones aritméticas de fecha y hora específicas del dialecto.