我需要选择两个给定日期(例如11月10日和1月25日)之间的所有条目,无论年份如何。
如果它只是1月25日和11月10日那就容易多了。但是如何构建我的查询以查找11月10日到1月25日之间的所有数据?
答案 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()))));
以上是经过测试和疯狂的。