sql >> Database >  >> RDS >> Mysql

Aankomende verjaardagen zoeken met jOOQ

jOOQ's Field.add() methode is geïnspireerd op Oracle's interpretatie van

DATE + NUMBER

... waar NUMBER (indien een Integer of Double ) is een aantal dagen. Wat je wilt is het equivalent van het toevoegen van een SQL-standaard INTERVAL YEAR TO MONTH tot een bepaalde datum. Dit kan worden bereikt door het gebruik van jOOQ's YearToMonth intervaltype , als u een constant interval wilt toevoegen. De YearToMonth type breidt ook java.lang.Number uit , en kan dus ook worden gebruikt met Field.add() , intuïtief.

Hoewel het mogelijk zou kunnen zijn om zo'n Field<YearToMonth> . te genereren via de bestaande jOOQ 3.2 API geloof ik dat je beter af bent met gewone SQL, mogelijk door een herbruikbare methode te creëren:

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

Dit kan een handige toevoeging zijn voor #2727 ook...

Helaas is de interpretatie van datum-tijdberekeningen door de verschillende SQL-dialecten moeilijk te standaardiseren. We verbeteren daar voortdurend dingen, maar vaak is gewone SQL de beste manier om dialectspecifieke rekenkundige uitdrukkingen voor datum en tijd te schrijven.



  1. Verschil tussen zwevend en decimaal gegevenstype

  2. Wat is de Option=N in de MySQL ODBC-verbindingsreeks?

  3. SQL Server Log Verzending &Disaster Recovery Installatie en configuratie -2

  4. Hoe verbind je Django met een MySQL-database via een SSL-verbinding?