2017-02-23 3 views
-1

У меня есть дата, и мне нужно подсчитать дни в текущем и предыдущем месяце того же года.Как подсчитать месячные мудрые дни по данной дате в mysql

Предположим, у меня есть дата, как 23 апреля 2017 года-

Что мне нужно:

Jan-2017 - 31 

Feb-2017 - 28 

March-2017 - 31 

April-2017 - 30 

Я не могу создать запрос для получения этих счетчиков.

+1

Ваш ожидаемый результат противоречива. Вам нужен год или нет? – Matt

+0

Не имеет значения. Но расчет дней должен основываться на годе, который прошел пользователь. В любом случае обновил вопрос. Благодарю. – MonsterJava

+0

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- запрос – Strawberry

ответ

0

Этот код делать то, что вы хотите, просто установите переменную @d до нужной даты:

set @d=date("2017-02-17"); 
set @d1=date(concat(year(@d),"-",month(@d),"-01")); 
set @d2=ADDDATE(@d1,32); 
set @d2=date(concat(year(@d2),"-",month(@d2),"-01")); 
select if(month(@d1)=12,31,dayofyear(@d2) - dayofyear(@d1)); 

отредактированную версию за весь месяц до выбранной даты:

Сначала мне нужна таблица для месяцы:

create table months(id INT); 
insert into months (id) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12); 

С этим утверждением и правильная датой, вставленное я получить желаемые даты последнего месяца:

set @d=date("2017-07-17"); 
select 
    concat(
     DATE_FORMAT(date(concat(year(@d),'-',id,'-1')),'%M - %Y - '), 
     dayofmonth(last_day(date(concat(year(@d),"-",id,"-01"))))) 
from 
    months where id between 1 and month(@d); 

Это обеспечивает:

January - 2017 - 31 
February - 2017 - 28 
March - 2017 - 31 
April - 2017 - 30 
May - 2017 - 31 
June - 2017 - 30 
July - 2017 - 31 
+0

Это вернет только текущие месяцы. – MonsterJava

+0

Вы правы, я добавил новую версию на весь месяц до выбранной даты. – Sascha