无论年份如何,在mysql中的两个日期之间选择数据

时间:2012-06-27 14:16:27

标签: mysql date

我需要选择两个给定日期(例如11月10日和1月25日)之间的所有条目,无论年份如何。

如果它只是1月25日和11月10日那就容易多了。但是如何构建我的查询以查找11月10日到1月25日之间的所有数据?

2 个答案:

答案 0 :(得分:4)

您可以使用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()函数会考虑这些因素

答案 1 :(得分:0)

如果你有确切的字符串'11月11日'和'25月1日',不使用任何会话变量等:

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

以上是经过测试和疯狂的。