sql >> Databáze >  >> RDS >> Mysql

Hledání nadcházejících narozenin pomocí jOOQ

pole jOOQ .add() metoda je inspirována výkladem

společnosti Oracle
DATE + NUMBER

... kde NUMBER (pokud je Celé číslo nebo Double ) je počet dní. To, co chcete, je ekvivalent přidání standardu SQL INTERVAL YEAR TO MONTH k danému datu. Toho lze dosáhnout pomocí jOOQ YearToMonth typ intervalu , pokud jste chtěli přidat konstantní interval. YearToMonth type také rozšiřuje java.lang.Number , a lze je tedy použít také s Field.add() , intuitivně.

I když by mohlo být možné vygenerovat takové Pole prostřednictvím stávajícího jOOQ 3.2 API se domnívám, že bude lepší, když se uchýlíte k prostému SQL, případně vytvořením znovu použitelné metody:

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

Toto může být užitečný doplněk funkce pro #2727 také...

Bohužel je obtížné standardizovat různé interpretace aritmetiky data a času v různých dialektech SQL. Neustále věci vylepšujeme, ale obyčejné SQL je často nejlepší způsob, jak psát aritmetické výrazy pro datum a čas specifické pro dialekt.



  1. Má SQL Server 2005 ekvivalent k datovému typu ENUM MySql?

  2. Pořadí sloupců ve vícesloupcovém indexu v MySQL

  3. Připojení AnySQL Maestro k Salesforce.com

  4. Jak vytvořit více jeden k jednomu