下面的查询返回开始日期和结束日期之间的所有星期二。在这种情况下,我还需要每隔一个星期二回来。
select * from
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) DATES from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where DATES between '2018-05-21' and '2018-08-31'
and dayname(DATES) in ('TUESDAY');
dates包含周二的所有日期。我现在需要的是如何每隔一个星期二提取。不知什么原因,我没想到这个。
2条答案
按热度按时间de90aj5v1#
包括
t0
在子查询中,然后添加mod
表达式到where
:请注意,这将任意选择开始计数期间的第一个或第二个星期二(您的问题不清楚是否确定)。
实际上,有一个非常简单的方法来正确计算:
它在第一个日期后按周计算,并且只返回每隔一周的日期。
xdnvmnnf2#
将where子句改为
这个date_format()函数将给出一年中00到53的那一周,然后对2进行模测试。无论何时为“0”,它都将是偶数周数。当它是“1”时,它将是一个“奇数”周数。