2013-09-03 1 views
1

Я пытаюсь получить список дат не между двумя датами.Дисплей Даты не в базе данных с использованием SQL-сервера

У меня есть даты в базе данных от '2013-01-01' до '2013-01-31', кроме 25, 27, 28 дат.

Теперь предположим, что я прохожу Дата начала = '2013-01-01' и Дата окончания = '2013-01-31', чтобы получить список отсутствующих дат в базе данных, а именно 25, 27, 28 дат.

Out ставить результат должен выглядеть следующим образом:

2013-01-25, 2013-01-27, 2013-01-28

Любая помощь будет очень ценна.

ответ

2

Если вы используете SQL Server 2005+, вы можете попробовать использовать что-то вроде

DECLARE @StartDate DATETIME = '01 Jan 2013', 
@EndDate DATETIME = '31 Jan 2013' 

;With Dates AS (
    SELECT @StartDate RunDate 
    UNION ALL 
    SELECT RunDate + 1 
    FROM Dates 
    WHERE RunDate + 1 <= @EndDate 
) 
SELECT * 
FROM Dates d LEFT JOIN 
    YourTable yt ON d.RunDate = yt.YourDate 
WHERE yt.YourDate IS NULL 
OPTION (MaxRecursion 0) 

В этом запросе мы используем рекурсивного CTE для создания ряда дат (OPTION (MaxRecursion 0), чтобы убедиться, что вы делаете не получить рекурсивную ошибку), то мы присоединяемся к рассматриваемой таблице и возвращаем только те значения, которые отсутствуют в этой таблице.

+0

Это работает помощником ... Большое спасибо за вашу помощь. ты спас мой день – user1990395

0

Пожалуйста, проверьте SQLFIDDLE. Может быть, это поможет вам.

Для получения дополнительной информации, пожалуйста, свяжитесь с this.