mySql获取每隔一个工作日的日期

时间:2018-05-19 14:36:35

标签: mysql sql

以下查询返回开始日期和结束日期之间的所有TUESDAYS。我还需要在这种情况下返回每隔一个星期二。

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 个答案:

答案 0 :(得分:0)

在子查询中加入awk ' NR==FNR { if (NR==1) new=$0; next } FNR==2 { $0 = new } { print } ' somefile.txt targetfile.txt ,然后将:file表达式添加到t0

mod

请注意,这将在开始计数期间任意选择第一个或第二个星期二(如果可以,您的问题不明确。)

实际上有一种非常简单的方法可以使计数正确:

where

这是在第一个日期之后的几周内计算,并且只返回每隔一周的日期。

答案 1 :(得分:0)

将您的where子句更改为

where DATES between '2018-05-21' and '2018-08-31'
and dayname(DATES) in ('TUESDAY')
and (date_format(DATES,'%U')%2 = 0);

date_format()函数将为您提供00到53年的一周,然后对2进行模数测试。每当它为' 0' 0它甚至是周数。每当它是' 1'这将是一个奇怪的'周数。