2017-02-23 8 views
-1

私は日付があり、同じ年の現在と前の月に日付を数える必要があります。mysqlの指定日に月の賢明な日数を計算するには

は私が必要なもの23 - 4月 - 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

関連する問題