Этот код делать то, что вы хотите, просто установите переменную @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
Ваш ожидаемый результат противоречива. Вам нужен год или нет? – Matt
Не имеет значения. Но расчет дней должен основываться на годе, который прошел пользователь. В любом случае обновил вопрос. Благодарю. – MonsterJava
См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql- запрос – Strawberry