Отображение дат не в базе данных с использованием сервера sql

Я пытаюсь получить список дат не между двумя датами.

У меня есть даты в базе данных с «2013-01-01» до «2013-01-31», за исключением дат 25, 27, 28.

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

Выходной результат должен быть следующим:

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

Любая помощь могла бы быть полезна.


person user1990395    schedule 03.09.2013    source источник


Ответы (1)


Если вы используете 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) гарантирует, что вы не получите рекурсивную ошибку), затем мы присоединяемся к рассматриваемой таблице и возвращаем только значения, отсутствующие в этой таблице. стол.

person Adriaan Stander    schedule 03.09.2013
comment
Это работает, приятель... Большое спасибо за вашу помощь. ты спас мой день - person user1990395; 03.09.2013