을 얻는 방법 날짜 테이블을 사 x 및 y 에서 sql server2005
-
01-07-2019 - |
문제
내가 원하는 빠른 방법(바람직하게 사용하는 동안 반복)의들이 활용하는 테이블의 매일 사이 날짜@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-날짜