sql >> データベース >  >> RDS >> Mysql

jOOQで次の誕生日を探す

    jOOQのフィールド.add() メソッドは、Oracleの

    の解釈に触発されています
    DATE + NUMBER
    

    ...ここでNUMBER整数の場合 またはDouble )は日数です。必要なのは、SQL標準の INTERVAL YEAR TO MONTHを追加するのと同じです。 与えられた日付に。これは、jOOQのYearToMonth インターバルタイプ 、一定の間隔を追加したい場合。 YearToMonth タイプはjava.lang.Numberも拡張します 、したがって、 Field.add() 、直感的に。

    そのようなFieldを生成することは可能かもしれませんが 既存のjOOQ3.2APIを使用すると、おそらく再利用可能なメソッドを作成することで、プレーンSQLに頼るほうがよいと思います。

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

    これは、#2727 の便利な機能追加になる可能性があります 同様に...

    残念ながら、さまざまなSQL方言による日時演算の解釈を標準化するのは困難です。そこでは常に改善を行っていますが、多くの場合、方言固有の日時算術式を作成するには、プレーンSQLが最適な方法です。



    1. mysqlのデフォルトの「mysql」データベースを回復/再作成する方法

    2. SQL ServerでFILEGROUPPROPERTY()を使用する方法

    3. ScaleGridDBaaSの2要素認証の有効化

    4. SQL Server(T-SQL)でパーティション化されたテーブルのパーティション化列を検索する