SQL查询 - 范围两个日期 - 包括空值

时间:2014-07-17 17:29:09

标签: sql sql-server

我有一张包含客户交易的表格。这些交易可以包含StartDateEndDate。如果EndDate未到来,则该字段为NULL。在我的查询中,如果我选择例如今天开始但没有enddate(即NULL)的事务,我得不到正确的结果。但是,如果我将@EndDate设置为明天,那么我会得到结果。有什么想法吗?

SELECT ISNULL(COUNT(Buyin), 0) AS CountBuyIns
FROM [Transaction] AS t
WHERE (t.StartDate >= @StartDate) AND (ISNULL(t.EndTime,GETDATE()) <= @EndDate)

3 个答案:

答案 0 :(得分:1)

AND (t.EndTime <= @EndDate OR t.EndTime IS NULL)

或:

AND COALESCE(t.EndTime, @EndDate) <= @EndDate

答案 1 :(得分:0)

更改WHERE子句的最后一部分,如此

AND t.EndTime IS NULL

答案 2 :(得分:0)

如果你没有选择@EndDate,听起来你想要在开始日期之后返回所有记录。要做到这一点,最简单的方法是将@EndDate包装在ISNULL中。

SELECT ISNULL(COUNT(Buyin), 0) AS CountBuyIns
FROM [Transaction] AS t
WHERE (t.StartDate >= @StartDate) AND (ISNULL(t.EndTime,GETDATE()) <= 
ISNULL(@EndDate, GETDATE()))

这样,如果@EndDate为null,则使用今天的日期。如果这不起作用,因为你有今天过来的有效EndDates,那么你可以使用或。

SELECT ISNULL(COUNT(Buyin), 0) AS CountBuyIns
FROM [Transaction] AS t
WHERE (t.StartDate >= @StartDate) AND (ISNULL(t.EndTime,GETDATE()) <= 
@EndDate OR @EndDate IS NULL)