2014-02-13 1 views
1

Я пишу синтаксис представления для поиска данных в базе данных, где временная метка col больше или равна дате первого понедельника последнего апреля. Я не могу использовать статическую дату, поскольку первый понедельник последнего апреля относится к текущей дате.Синтаксис представления MySQL, где предложение больше или равно первому понедельнику последнего апреля

Любые указатели будут оценены по достоинству. Ive потратил довольно много времени, пытаясь понять, как я буду делать это с функциями datetime MySQL, и пока не повезло!

ответ

1

получить последний апрель на текущую дату:

SELECT DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH); 

прибудет год в апреле прошлого года на текущую дату:

SELECT YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH)); 

получить первый понедельник апреля 2013 года, например:

SELECT DATE_SUB('2013-04-07',INTERVAL WEEKDAY('2013-04-07') DAY); 

получить первый понедельник апреля прошлого года:

SELECT DATE_SUB(CONCAT(YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH)),"-04-07"),INTERVAL WEEKDAY(CONCAT(YEAR(DATE_ADD(CURDATE(), INTERVAL ((4-MONTH(CURDATE()))%24-12)%12 MONTH)),"-04-07")) DAY); 
+0

Спасибо, это работало удовольствие! – ThePHPUnicorn

0

Одним из способов вы можете сделать это будет следующий SQL:

SELECT * FROM DATA WHERE year(adddate(created_at, interval 9 month)) >= year(curdate()); 

Это просто сдвигая все на 9 месяцев в будущем, так что 1 апреля 2013 будет казаться 1 января 2014 для цели предложения where.

Вы также можете перенести все обратно на 3 месяца, но тогда вы также должны сместить CurDate, чтобы убедиться, что он работал в период с 1 января по 1 апреля следующего года

sqlFiddle

Смежные вопросы