2016-06-24 17 views
1

私はこれを十分に説明できると思います。私は、その列からの最小値と最大値を取得するために別のテーブルの日付列を使用し、その間のすべての日付を入力する日付フィールドを持つテーブルを作成しようとしています。カラムから最小日付と最大日付の間の日付を記入する方法

したがって、最小値と最大値が1/1/2016と6/1/2016であった場合、それらの日付の間のすべての日付をリストに表示することをお勧めします。私はSQL Server Management Studioの2014年あなたの助けを

感謝を使用しています

+0

クイックGoogle検索では、この1を得ています。http://stackoverflow.com/questions/11141507/how-to-generate-a-range-of-dates-in-sql-server 2 http:// stackoverflow。 com/questions/7824831/generate-dates-between-date-ranges 3. http://stackoverflow.com/questions/17529860/how-to-list-all-dates-between-two-dates 4. http:// stackoverflow.com/questions/23290454/get-all-dates-between-two-dates-in-sql-server –

答えて

0

これを行う1つの方法は、再帰的なcteを使用することです。あなたが電源を振るう場合

declare @mindate date = (select min(datecol) from tablename); 
declare @maxdate date = (select max(datecol) from tablename); 

with t(dt) as 
(select @mindate 
union all 
select dateadd(dd,1,dt) from t where dt < @maxdate) 
select dt 
into #temptable 
from t 

Example

0

日付最大値と最小との間に日付の範囲を取得するための表

Declare @Dates TABLE ([Date] DATE) 
INSERT INTO @Dates VALUES ('1/1/2016'), ('6/1/2016') 

クエリはその後、

WITH X AS (
SELECT MinDate = MIN([Date]) 
     ,DateNum = DATEDIFF(DAY, MIN([Date]) , MAX([Date])) 
FROM @Dates), 
DateRange AS (
     Select 
      DATEADD(DAY, a.number, (Select MinDate FROM X)) Dates 
     FROM 
     (
      SELECT DISTINCT TOP (Select DateNum +1 FROM x) a.number 
      FROM master..spt_values a 
        CROSS JOIN master..spt_values b 
      WHERE a.number >=0 
     )A 
    ) 
Select * FROM DateRange 
0

日付私はあなたのデータベースに "日付"テーブルを作成することを提案します。私は、日付に関する特定の属性を記念して(そして集中化させる)ために非常に便利な「日付」テーブルを持っていることを知っています。

日付テーブルを作成し

...それはかなりまっすぐ進むだと彼らはネイティブのSQL Serverの機能を使用して計算することができるものであっても、列でそれをロードすること自由に感じ

。それらを物理的に格納すると、パフォーマンスが向上するだけでなく、柔軟性が向上することがあります。

create table Dt (
    Dt date primary key clustered, 
    BestDayEverBit bit not null default(0)); 

insert Dt (Dt) 
select top (100000) 
    dateadd(day, (row_number() over (order by (select null))), convert(date, '1900')) 
from sys.all_columns a 
cross join sys.all_columns b; 

クエリ...

declare 
    @BegDt date = '2016-02-03', 
    @EndDt date = '2016-02-13'; 

select * 
from Dt 
where Dt >= @BegDt 
    and Dt < @EndDt; 

結果

Dt   BestDayEverBit 
---------- -------------- 
2016-02-03 0 
2016-02-04 0 
2016-02-05 0 
2016-02-06 0 
2016-02-07 0 
2016-02-08 0 
2016-02-09 0 
2016-02-10 0 
2016-02-11 0 
2016-02-12 0 

この情報がお役に立てば幸いです。

関連する問題