1

テーブル エントリが使用されている月を一覧表示する方法を探していましたが、うまくいきませんでした。

2 つの日付の間に使用中のアイテムを含むテーブルがあるとします。

ID   StartDate   EndDate as ItemsInUse

A   01.01.2013   31.03.2013
B   01.02.2013   30.04.2013
C   01.05.2013   31.05.2013

そのテーブルをクエリして、次のようなものを返す方法が必要です。

ID  Month
A   01
A   02
A   03
B   02
B   03
B   04
C   05

私は本当にこれで立ち往生しています。これを行う手がかりはありますか?

PS : ヨーロッパの日付形式 ;-)

4

5 に答える 5

2

次にカレンダーテーブルを作成します

SELECT DISTINCT i.Id, c.Month
  FROM Calendar c
  JOIN ItemsInUse i 
    ON c.ShortDate BETWEEN i.StartDate AND i.EndDate
于 2013-06-18T13:59:22.660 に答える
0

http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_monthを使用しますMONTH()

SELECT ID, MONTH(StartDate)
于 2013-06-18T14:29:32.800 に答える
0

うーん...これは改善できるとあえて言いますが、大まかな準備はできています(ms-sqlを想定)

create table #results (ID varchar(10), Month int, Year int);

declare @ID varchar(10);
declare @StartDate datetime;
declare @EndDate datetime;

declare myCursor cursor for select [ID], [StartDate],[EndDate] from ItemsInUse;
open myCursor;
delete from #results;
fetch next from myCursor into @ID, @StartDate, @EndDate;
declare @tempDate datetime;
 while @@FETCH_STATUS = 0
begin
    set @tempdate = CAST( CAST(year(@StartDate) AS varchar) + '-' + CAST(MONTH(@StartDate) AS varchar) + '-' + CAST(1 AS varchar) AS DATETIME);
    while @tempDate < @EndDate
    begin
        insert into #results values (@ID, MONTH(@tempDate), YEAR(@tempDate));
        set @tempDate = DATEADD(month,1,@tempdate);
    end

    fetch next from myCursor into @ID, @StartDate, @EndDate;
end

close myCursor;
deallocate myCursor;

select * from #results;
drop table #results;
于 2013-06-18T14:35:50.433 に答える