在给定参数@startDate和@endDate的情况下,尝试查询记录在提供的时间范围内发生的时间。我在下面有一个功能性的where子句,但我怀疑它可以更直接。
如果提供了结束日期,则不会在该日期之后选择记录。如果提供了开始日期,则不会在该日期之前选择记录。如果没有提供日期,则将选择所有记录。
SELECT *
FROM myTable
WHERE
(
(@startDate IS NULL AND ((@endDate IS NULL) OR (myTable.[recordDate] <= @endDate)))
OR
(@endDate IS NULL AND ((@startDate IS NULL) OR (myTable.[recordDate] >= @startDate)))
OR
(myTable.[recordDate] BETWEEN @startDate AND @endDate)
)
答案 0 :(得分:1)
您可以使用ISNULL
函数解决方法,如下所示:
SELECT * FROM myTable
WHERE myTable.[recordDate] >= ISNULL(@startDate, '01/01/1900')
AND myTable.[recordDate] <= ISNULL(@endDate, getDate())
此查询将选择以下所有行:
答案 1 :(得分:0)
设置带地板和天花板的临时桌面,并在BETWEEN地板和天花板上加入桌面。将无限制条件(NULL)设置为1/1/1900和12/31/9999。最近一位同事向我展示了这一点并且有效。