1

无论年份如何,我都需要选择两个给定日期(例如 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)那么您的应用程序需要替换BETWEENNOT BETWEEN或交换参数的顺序。如果您需要在 SQL 中执行此操作:

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

请注意闰年,因为该DAYOFYEAR()功能会考虑到闰年

于 2012-06-27T14:25:34.670 回答
0

如果您有确切的字符串“11 Nov”和“25 Jan”,则不使用任何会话变量等:

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 回答