1

年に関係なく、指定された2つの日付(たとえば、11月10日と1月25日)の間のすべてのエントリを選択する必要があります。

1月25日から11月10日までの場合は、はるかに簡単です。しかし、11月10日から1月25日までのすべてのデータを検索するようにクエリを構成するにはどうすればよいでしょうか。

4

2 に答える 2

4

MySQLのDAYOFYEAR()機能を使用できます。

DAYOFYEAR(field) BETWEEN DAYOFYEAR(A) AND DAYOFYEAR(B)

その場合DAYOFYEAR(A)>DAYOFYEAR(B)、アプリケーションは引数の順序を置き換えるかBETWEEN、または入れ替える必要があります。NOT BETWEENSQLでそれを行う必要がある場合:

DAYOFYEAR(field) BETWEEN
   LEAST(DAYOFYEAR(A), DAYOFYEAR(B)) AND GREATEST(DAYOFYEAR(A), DAYOFYEAR(B))

関数はうるう年DAYOFYEAR()を考慮に入れるため、うるう年に注意してください

于 2012-06-27T14:25:34.670 に答える
0

正確な文字列「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()))));

上記はテストされており、クレイジーです。

于 2012-06-27T14:40:11.050 に答える