mysql中对比月_mysql-仅按月和日比较日期

我的foos表中有日期字段.所以现在我需要从日期间隔中选择所有foo,但仅比较月份和日期.

例如,我需要选择2012年1月7日之前和之后10天的所有foo- 12月28日-1月17日或2009年7月10日左右的一周-> 7月3日至7月17日.应仅根据全年的月份和日期进行选择.

我原始的解决方案

SELECT b_date FROM foos

WHERE DAYOFYEAR(b_date) BETWEEN

DAYOFYEAR('2011-01-07' - INTERVAL 10 DAY) AND (DAYOFYEAR('2011-01-07' - INTERVAL 10 DAY) + 20)

OR DAYOFYEAR(b_date) BETWEEN

(DAYOFYEAR('2011-01-07' + INTERVAL 10 DAY) - 20) AND DAYOFYEAR('2011-01-07' + INTERVAL 10 DAY)

GROUP BY foos.id;

解决方法:

如果要查找日期为2011年12月28日和2012年1月17日的所有日期,则可以使用以下方法:

WHERE DateColumn BETWEEN '2012-01-07' - INTERVAL 10 DAY

AND '2012-01-07' + INTERVAL 10 DAY

对于更一般的问题,我看到了两种方法.易于编写,但使用大型foos表可能会很慢:

SELECT f.*

FROM

foos AS f

CROSS JOIN

( SELECT 32 * MONTH(StartDate) + DAY(StartDate)

AS StartCheck

, 32 * MONTH(EndDate) + DAY(EndDate)

AS EndCheck

FROM

( SELECT ('2012-01-07' - INTERVAL 10 DAY) AS StartDate

, ('2012-01-07' + INTERVAL 10 DAY) AS EndDate

) AS c

) AS cc

WHERE 32*MONTH(f.DateColumn)+DAY(f.DateColumn) BETWEEN StartCheck

AND EndCheck

OR StartCheck > EndCheck

AND 32*MONTH(f.DateColumn)+DAY(f.DateColumn) NOT BETWEEN EndCheck + 1

AND StartCheck - 1

标签:mysql,date

来源: https://codeday.me/bug/20191201/2083552.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值