문제

내가 원하는 빠른 방법(바람직하게 사용하는 동안 반복)의들이 활용하는 테이블의 매일 사이 날짜@x 고 날짜@y 할 수 있도록 외부에 가입하는 일부 통계,테이블의 일부는 기록이를 위한 특정일 사이에 허용하는 표시의 누락 일.0

도움이 되었습니까?

해결책

엄밀히 말하면 이지 않는 정확하게 당신의 질문에 대답하지만,그것의 아주 깔끔합니다.

할 수 있다고 가정하면 살 수를 지정하는 일의 시작일 이후에,다음 사용하는 일반적인 표현을 제공합니다:

WITH numbers ( n ) AS (
        SELECT 1 UNION ALL
        SELECT 1 + n FROM numbers WHERE n < 500 )
    SELECT DATEADD(day,n-1,'2008/11/01') FROM numbers
    OPTION ( MAXRECURSION 500 )

다른 팁

나는 당신을 믿고 이 블로그 게시물.

나는 달력을 만들는 테이블이 단지 포함된 모든 날짜에 적합한 날짜를 시작할 때까지 적당한 끝 날짜입니다.이 걸리지 않으면서 많은 공간에서 데이터베이스 및 이러한 유형의 쿼리 아이의 재생합니다.

select  ...
from    Calendar
        left outer join
        ...
where   Calendar.Date >= @x
and     Calendar.Date <= @y

내가 생각하는 당신이뿐만 아니라 그냥 그렇게 하는 동안 반복입니다.나는 알것은,그러나 그것은 간단하고 작동합니다.

내가 실제로 비슷한 일을 잠시 뒤로하지만,나 올 수 없는 방법을 사용하지 않습니다.

최고의 내열 테이블,그리고 다음을 선택하면 날짜와 함께 하고 싶었으니다.

블로그 bduke 연결하여 내가 생각하지만,temp table 솔루션은 아마도 깨끗한 솔루션입니다.

내가 찾는 또 다른 테이블에 저장하는 모든 일(그것은 방문하는 웹 사이트),그래서는 방법에 대한 이...

Declare @FromDate datetime,  
        @ToDate datetime  
Declare @tmpDates table   
            (StatsDate datetime)
Set @FromDate = DateAdd(day,-30,GetDate())
Set @ToDate = GetDate()

Insert Into  @tmpDates (StatsDate)
Select 
    distinct CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME)
FROM tbl_visitorstats 
Where visitDate between @FromDate And @ToDate 
Order By CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME) 


Select * FROM @tmpDates

그것은에 의존하는 기타 표지 항목에 대한 모든 날고 싶지만,그것의 98%가능성이 있는 것에 대한 데이터를 매일입니다.

에 약간의 트위스트 답변으로 주어 https://stackoverflow.com/a/95728/395440.할 수 있는 일을 지정한 범위까지 현재 날짜입니다.

DECLARE @startDate datetime
SET @startDate = '2015/5/29';

WITH number ( n ) AS (
        SELECT 1 UNION ALL
        SELECT 1 + n FROM dates WHERE n < DATEDIFF(Day, @startDate, GETDATE()) )
    SELECT DATEADD(day,n-1,@startDate) FROM number where
    datename(dw, DATEADD(day,n-1,@startDate)) in ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
    OPTION ( MAXRECURSION 500 )

그냥 작성합니다.누군가가 쓰는 루프 이를 위해,그것은 당신이 또는 SQL Server.

DECLARE @Dates TABLE
(
  TheDate datetime PRIMARY KEY
)
DECLARE @StartDate datetime, @EndDate datetime
SELECT @StartDate = '2000-01-01', @EndDate = '2010-01-01'


DECLARE @LoopVar int, @LoopEnd int    
SELECT @LoopEnd = DateDiff(dd, @StartDate, @EndDate), @LoopVar = 0


WHILE @LoopVar <= @LoopEnd
BEGIN
  INSERT INTO @Dates (TheDate)
  SELECT DateAdd(dd,@LoopVar,@StartDate)

  SET @LoopVar = @LoopVar + 1
END


SELECT *
FROM @Dates

그냥:Col>시작 날짜와 col < end-날짜

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top