无论年份如何,我都需要选择两个给定日期(例如 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()
功能会考虑到闰年
如果您有确切的字符串“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()))));
以上是经过测试的,很疯狂。