年に関係なく、指定された2つの日付(たとえば、11月10日と1月25日)の間のすべてのエントリを選択する必要があります。
1月25日から11月10日までの場合は、はるかに簡単です。しかし、11月10日から1月25日までのすべてのデータを検索するようにクエリを構成するにはどうすればよいでしょうか。
MySQLのDAYOFYEAR()
機能を使用できます。
DAYOFYEAR(field) BETWEEN DAYOFYEAR(A) AND DAYOFYEAR(B)
その場合DAYOFYEAR(A)>DAYOFYEAR(B)
、アプリケーションは引数の順序を置き換えるかBETWEEN
、または入れ替える必要があります。NOT BETWEEN
SQLでそれを行う必要がある場合:
DAYOFYEAR(field) BETWEEN
LEAST(DAYOFYEAR(A), DAYOFYEAR(B)) AND GREATEST(DAYOFYEAR(A), DAYOFYEAR(B))
関数はうるう年DAYOFYEAR()
を考慮に入れるため、うるう年に注意してください
正確な文字列「11Nov」および「25Jan」があり、セッション変数などを使用していない場合:
SELECT * FROM t1
WHERE c1 BETWEEN
DATE(REPLACE(STR_TO_DATE('11 Nov','%d %b'),'0000',YEAR(NOW()))) AND
IF( DATE(REPLACE(STR_TO_DATE('25 Jan','%d %b'),'0000',YEAR(NOW())))
< DATE(REPLACE(STR_TO_DATE('11 Nov','%d %b'),'0000',YEAR(NOW()))),
DATE(REPLACE(STR_TO_DATE('25 Jan','%d %b'),'0000',YEAR(NOW())+1)),
DATE(REPLACE(STR_TO_DATE('25 Jan','%d %b'),'0000',YEAR(NOW()))));
上記はテストされており、クレイジーです。