3

我想进入check datebetween two dates可以作为NULL 使用存储过程传递

代码

declare @fromDate date = null
declare @toDate date = null

select * from Mytable 
where date betweeen @fromDate and @toDate OR NULL (how to check for both parameters)

我还有另外 2 个参数,所以无论日期结果如何都应该显示。如果 @todate 和 @fromDate 为 NULL

请帮忙。

4

3 回答 3

11

尝试如下合并功能

declare @fromDate date = null
declare @toDate date = null

select * from Mytable 
where date between coalesce(@fromDate,date) and coalesce(@toDate,date)
于 2013-09-12T10:07:09.880 回答
1

几乎可以将您的英语转换为 SQL:

where (date is null or date betweeen @fromDate and @toDate)
于 2013-09-12T10:19:51.773 回答
0

在寻找比我更好的解决方案"between"时,"coalesce"我发现了这个线程:

  • 火鸟 SQL
  • 参数永远不会为 NULL
  • createdatum 永远不会为 NULL
  • offdatum 可以为 NULL - 原因很明显;)

初步解决方案:

where
    X = :X
    AND
    cast(:QryDateTime as DATE) between
      createdatum and coalesce(offdatum, cast(:QryDateTime as DATE))

问题有点棘手:当使用“现在”作为 QryDateTime 的值时,(很少)没有找到结果 - 即使应该存在

问题是 now 每次都单独评估,显然不是按从左到右的顺序。

我终于把它改成了:

where
    X = :X
    AND
    iif(offdatum is null, 1, iif(offdatum > cast(:QryDateTime as DATE), 1, 0)) = 1
    AND
    cast(:QryDateTime as DATE) > createdatum
于 2021-08-17T07:24:12.813 回答