我有一张包含客户交易的表格。这些交易可以包含StartDate
和EndDate
。如果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)
答案 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)