1

2 つの日付の間にない日付のリストを取得しようとしています。

データベースに「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

どんな助けでも本当に感謝しています。

4

1 に答える 1

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)は、再帰エラーが発生しないようにするためです)、問題のテーブルに結合し、そのテーブルにない値のみを返します。 .

于 2013-09-03T12:53:05.150 に答える