mySql получить дату для каждого второго дня недели - PullRequest
0 голосов
/ 19 мая 2018

Следующий запрос возвращает все ВТОРНИКИ между датами начала и окончания.В таком случае мне также нужно возвращать каждый вторник в этом случае.

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');

ДАТЫ имеют все даты, вторник.Что мне нужно сейчас, это как извлечь каждый второй вторник.По какой-то причине этот ускользает от меня.

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

измените условие 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', она будетбыть четным номером недели.Всякий раз, когда это «1», это будет «нечетный» номер недели.

0 голосов
/ 19 мая 2018

Включите t0 в подзапрос, а затем добавьте выражение mod к where:

where DATES between '2018-05-21' and '2018-08-31' and t0 mod 2 = 1

Обратите внимание, что это будет произвольно выбирать первый или второй вторник в период для началасчитать (ваш вопрос не ясен, если это нормально).

Существует довольно простой способ получить правильный счет:

where DATES between '2018-05-21' and '2018-08-31' and 
      floor(datediff(dates, '2018-05-21') / 7) mod 2 = 0

Это подсчитывает недели после первого свиданияи возвращает только даты каждой второй недели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...