TSQL查询历史表MSSQL2008r2

时间:2015-10-05 10:14:03

标签: tsql sql-server-2008-r2

MSSQL 2008r2

我正在尝试查询存储更改的开始和结束日期的表,并且我希望返回两个日期之间的所有行,@ StartDate和@EndDate。

以下是示例表架构

    CREATE TABLE dbo.History(
     cKey   INT NOT NULL
    ,vKey   INT NOT NULL
    ,CreateDate DATETIME NOT NULL
    ,DeletedTime    DATETIME NULL
)

所以我的查询需要包含[CreateDate]为< = @StartDate但[DeletedTime]为空的行,其中[CreateDate]为< = @StartDate且[DeletedTime]为< @EndDate。

由于[DeletedTime]列可以为空,因此[DeletedTime]为空的行仍然是当前/活动的。

以下SQL不起作用。仅返回[DeletedTime]为空的行,即活动行。排除在@StartDate和@EndDate之间删除的行

SELECT * FROM dbo.History 
WHERE @StartDate >= CreateDate 
AND @EndDate <= ISNULL( DeletedTime, '2099-12-12 23:59:59' )

任何想法专家? 谢谢你提前。

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找这个

WHERE (CreateDate <= @StartDate AND [DeletedTime] IS NULL) 
     OR ([CreateDate] <= @StartDate and [DeletedTime] < @EndDate)