sql >> Database teknologi >  >> RDS >> Mysql

Find kommende fødselsdage med jOOQ

jOOQ's Felt .add() metode er inspireret af Oracles fortolkning af

DATE + NUMBER

... hvor NUMBER (hvis et Heltal eller Dobbelt ) er et antal dage. Det, du ønsker, svarer til at tilføje en SQL-standard INTERVAL ÅR TIL MÅNED til en given dato. Dette kunne opnås ved at bruge jOOQs YearToMonth intervaltype , hvis du vil tilføje et konstant interval. YearToMonth type udvider også java.lang.Number , og kan således også bruges med Field.add() , intuitivt.

Selvom det måske er muligt at generere sådan et felt gennem eksisterende jOOQ 3.2 API tror jeg, at du vil være bedre stillet til blot at ty til almindelig SQL, muligvis ved at oprette en genbrugelig metode:

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

Dette kan være en nyttig tilføjelse af funktioner til #2727 også...

Desværre er de forskellige SQL-dialekters fortolkninger af dato-tidsregning svære at standardisere. Vi forbedrer konstant tingene der, men ofte er almindelig SQL den bedste måde at skrive dialektspecifikke aritmetiske udtryk for dato og klokkeslæt.



  1. DATEDIFF() vs DATEDIFF_BIG() i SQL Server:Hvad er forskellen?

  2. PostgreSQL – Sådan fjerner du gentagne værdier

  3. Hvordan laver man en indre deltagelse i django?

  4. Hvordan $_POST en dynamisk tildelt værdi i PHP?