sql >> Databasteknik >  >> RDS >> Mysql

Hitta kommande födelsedagar med jOOQ

jOOQs Fält .add() Metoden är inspirerad av Oracles tolkning av

DATE + NUMBER

... där NUMBER (om ett Heltal eller Dubbel ) är ett antal dagar. Det du vill ha är att lägga till en SQL-standard INTERVAL YEAR TO MONTH till ett givet datum. Detta kan uppnås genom att använda jOOQs YearToMonth intervalltyp , om du vill lägga till ett konstant intervall. YearToMonth typ utökar också java.lang.Number , och kan därmed även användas med Field.add() , intuitivt.

Även om det kan vara möjligt att generera ett sådant Fält genom befintligt jOOQ 3.2 API tror jag att du kommer att bli bättre av att bara ta till vanlig SQL, möjligen genom att skapa en återanvändbar metod:

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);
}

Detta kan vara en användbar funktionstillägg för #2727 likaså...

Tyvärr är de olika SQL-dialekternas tolkningar av aritmetiken för datum och tid svåra att standardisera. Vi förbättrar hela tiden saker där, men ofta är vanlig SQL det bästa sättet att skriva dialektspecifika aritmetiska uttryck för datum och tid.



  1. Hur kan jag använda jQuery för att köra MySQL-frågor?

  2. MySQL hur får man värdet att förfalla?

  3. Kan MySQL använda Index när det finns ELLER mellan villkoren?

  4. Hur får man fält efter namn i frågan Python?