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

SQL:年のない2つの日付の間はどこですか?

    この問題を考える最良の方法は、日付をその年の日に対応する0から365までの数値に変換することです。次に、この差が14未満の日付を選択するだけで、2週間のウィンドウが得られます。

    それは年の初めか終わりに崩壊するでしょう。しかし、単純なモジュラー演算で答えが得られます。

    幸い、MySQLにはDAYOFYEAR(date)があります 、それほど複雑ではありません:

    SELECT * FROM tbl t
    WHERE 
      MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
      OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14
    

    その余分な+ 365 MySQLのMODは負の数を返すため、が必要です。

    この回答はうるう年を正しく考慮していません。今年がうるう年ではなく、年末から14日以内の場合は、含めるべき1月の1日を逃します。それが気になる場合は、365を置き換える必要があります [the number of days in the year - 1 ]。



    1. OracleDBの引用列名

    2. SQLite3LIKEまたはPostgreSQLILIKE用の汎用Rubyソリューション?

    3. SQLで数値を最も近い整数に切り上げる方法

    4. MacにSQLOPSをインストールする方法