2016-06-24 3 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-dates-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

재귀 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 서버 기능을 사용하여 계산 될 수있는 무언가 경우에도 열이 그것을로드 주시기

. 물리적으로 저장하면 성능이 향상되고 유연성이 향상됩니다.

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 

희망이 도움이됩니다.

관련 문제