Возможная проблема: а spencer7593 заметил - и, как я должен был сделать и не сделал - исходный запрос не является MySQL на всех. Если вы портируете запрос, это нормально. В противном случае этот ответ не будет полезен, так как он использует функции MySQL.
День, когда вы хотите, - это номер 4 (0 - воскресенье в MySQL).
Итак, вы хотите последний день месяца, если последний день месяца равен 4; если день месяца равен 5, вам нужна дата, которая на 1 день раньше; если день месяца - 3, вам нужна дата, которая на 1 день позже, но это невозможно (конец месяца), поэтому вам действительно нужна дата на шесть дней раньше.
Это означает, что если разница в дневном значении отрицательна, вы хотите, чтобы это по модулю семь.
Вы можете построить это выражение (@DATE вашей дата, я использую поддельные даты для тестирования)
SET @DATE='2015-02-18';
DATE_SUB(LAST_DAY(@DATE), INTERVAL ((WEEKDAY(LAST_DAY(@DATE))+7-4))%7 DAY);
Это занимает последний день месяца (LASTDAY(@DATE)
), то он вычисляет свой будний день, получение числа от 0 до 6. Добавляет семь, чтобы обеспечить положительность после вычитания; затем вычтите желаемый номер дня, в этом случае 4 для пятницы.
Результат, по модулю семь, является разницей (всегда положительной) от дневного дневного номера до . Требуется daynumber. Поскольку DATE_SUB(date, 0)
возвращает дату аргумента, нам не нужно использовать IF
.
SET @DATE='1962-10-20';
SELECT DATE_SUB(LAST_DAY(@DATE), INTERVAL ((WEEKDAY(LAST_DAY(@DATE))+7-4))%7 DAY) AS friday;
+------------+
| friday |
+------------+
| 1962-10-26 |
+------------+
Ваш запрос тогда стал бы что-то вроде:
SELECT `name`, `date`,
DATE_SUB(LAST_DAY(`date`),
INTERVAL ((WEEKDAY(LAST_DAY(`date`))+7-4))%7 DAY) AS friday
FROM battles;
возможно дубликат [Получить первый или последний пятницу в месяц] (http://stackoverflow.com/questions/924246/get- первый или последний-пятница-в-месяц) – JohnP
@JohnP, что сообщение относится к PHP-коду, это чистый MySql. Хотя вариант PHP может быть самым простым для этой задачи. – Scriptable
Боюсь, что я не сильный в php, а также в mysql. И я не могу использовать php – messier101