当前位置: 首页 > 面试题库 >

将WHERE子句与BETWEEN和null日期参数一起使用

阮健
2023-03-14
问题内容

我的WHERE条款之一是:

AND (DateCreated BETWEEN @DateFrom and @DateTo OR (@DateFrom IS NULL OR @DateTo IS NULL))

@DateFrom@DateTo是可能是的输入参数NULL

如果它们都为null,则基本上需要忽略BETWEEN和返回所有记录。

如果@DateFromNULL,但是@DateToNOT NULL,那么我需要返回DateCreated不大于@DateTo(包括)的所有记录。

如果@DateFromNOT NULL,但是@DateToNULL,那么我需要返回所有记录,其中DateCreated不得早于@DateFrom(包括)直到今天的日期。

DateCreated不是null或有时是null字段。

到目前为止,我的WHERE子句无法完全按照我的要求运行。


问题答案:

当一个或另一个是NULL:时,只需要一些额外的条件即可处理:

AND (
    (DateCreated >= @DateFrom and DateCreated < DATEADD(day,1,@DateTo)) 
 OR (@DateFrom IS NULL AND @DateTo IS NULL)
 OR (@DateFrom IS NULL AND DateCreated < DATEADD(day,1,@DateTo))
 OR (@DateTo IS NULL AND DateCreated >= @DateFrom)
    )

编辑:Giorgi的方法更简单,在这里它适用于DATETIME

AND (       (DateCreated >= @DateFrom OR @DateFrom IS NULL) 
        AND (DateCreated < DATEADD(day,1,@DateTo) OR @DateTo IS NULL)
    )

BETWEEN或对字段<=使用DATE变量时的问题DATETIME是,将排除最后一天午夜之后的任何时间。

'2015-02-11 13:07:56.017' 大于'2015-02-11'
比铸造你的领域作为而DATE作比较,它的性能更好,每天从添加到您的变量和变化<=<



 类似资料:
  • 本文向大家介绍我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?,包括了我们如何将MySQL DISTINCT子句与WHERE和LIMIT子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 通过在MySQL查询中将WHERE子句与DISTINCT子句一起使用,我们将基于一个条件,即MySQL返回结果集的唯一行。通过在MySQL查询中使用LIMIT子句和DISTIN

  • 本文向大家介绍MySQL REPLACE()函数如何与WHERE子句一起使用?,包括了MySQL REPLACE()函数如何与WHERE子句一起使用?的使用技巧和注意事项,需要的朋友参考一下 我们知道WHERE子句用于在MySQL查询中放置条件,并且MySQL根据这些条件返回结果集。类似地,当我们将函数与WHERE子句一起使用时,结果集将取决于提供的条件。以下是使用“学生”表中的数据的示例,其中函

  • 问题内容: 使用BETWEEN子句或使用<= AND> =比较之间在性能上有区别吗? 即这两个查询: …和 在此示例中,year列是带有索引的VARCHAR2(4)。 问题答案: 这两个示例查询之间没有性能差异,因为这只是表示 包含 范围比较的一种简便方法。Oracle解析条件时,它将自动扩展为单独的比较子句: 前任。 …将自动变为:

  • 我将QueryDSL与jpa一起使用,我想查找日期范围之间的记录,如下所示 但between仅支持布尔表达式和字符串表达式

  • 问题内容: 我正在使用PDO来执行一条语句,该语句使用将数组作为其值的子句: 上面的代码工作得很好,但是我的问题是为什么不能: 此代码将返回等于(1)中第一项的项目,但不返回数组(2和3)中的其余项目。 问题答案: PDO不适用于此类情况。您需要动态创建带有问号的字符串并将其插入查询中。 如果查询中还有其他占位符,则可以使用以下方法(代码取自我的PDO教程): 您可以使用函数将所有变量连接到单个数

  • 问题内容: 我有一个DBF文件,正在尝试从C#代码读取它。我可以在不对varchar类型字段应用任何条件或条件的情况下成功读取文件。我的问题是我必须从Date字段(type:date)中过滤记录。我尝试过以下方法, 上面给出了语法错误:缺少运算符 上面给出了数据类型不匹配错误 上面的方法不会引发任何异常,但是尽管有匹配的记录,但不会返回任何记录。 where子句也发生相同的情况。我该怎么做才能过滤