В принципе, просто проверяет каждый случай.
Строго говоря это точно не отвечает на Ваш вопрос, но его крутое.
Принятие Вас может жить с определением количества дней после того, как дата начала, затем с помощью Общего Выражения Таблицы даст Вам:
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 )
Я составил бы таблицу Calendar, которая просто содержала каждую дату с подходящей даты начала до подходящей даты окончания. Это не заняло бы много места в Вашей базе данных и сделает эти типы детских игрушек запроса.
select ...
from Calendar
left outer join
...
where Calendar.Date >= @x
and Calendar.Date <= @y
Я думаю, что Вы могли бы также просто выполнить в нем некоторое время цикл. Я знаю, что это ужасно, но это легко, и это работает.
Я на самом деле делал что-то подобное некоторое время назад, но я не мог придумать путь, который не использовал цикл.
Лучшей, которую я получил, была временная таблица и затем выбор дат, на которых я хотел присоединиться в это.
Блог bduke связанный с является милым, хотя я думаю, что временным решением для таблицы является, возможно, более чистое решение.
Я нашел другую таблицу, которая хранит каждую дату (это - посетители веб-сайта), таким образом, как насчет этого...
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%, вероятно, будут данные в течение каждого дня.
Просто запишите цикл. Кто-то должен записать цикл для этого, быть им Вы - или 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
Просто: ГДЕ седло> дата начала И седло <дата окончания