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' )
任何想法专家? 谢谢你提前。
答案 0 :(得分:1)
我认为你正在寻找这个
WHERE (CreateDate <= @StartDate AND [DeletedTime] IS NULL)
OR ([CreateDate] <= @StartDate and [DeletedTime] < @EndDate)