优化SQL日期范围查询

OSBastard

在给定参数@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)
   )
中学

您可以使用ISNULL以下功能来解决

SELECT * FROM myTable
WHERE myTable.[recordDate] >= ISNULL(@startDate, '01/01/1900')
AND   myTable.[recordDate] <= ISNULL(@endDate, getDate())

该查询将选择以下所有行:

  • 在@startDate和@endDate之间(包括两者)
  • 如果@endDate为null,则在@startDate和当前日期时间之间
  • 如果@startDate为null,则在01/01/1900和@endDate为null的今天之间的日期之间
  • 在01/01/1900之间(如果@startDate为空)和@endDate

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章