【问题标题】:SQL Query Between Dates in Visual Studio TableVisual Studio 表中日期之间的 SQL 查询
【发布时间】:2018-12-17 16:46:39
【问题描述】:

我在 Visual Studio 中有一个表,我想在其中为 StartDate 创建一个输入字段,为 EndDate 创建另一个输入字段,其中用户为两者选择一个日期,它将返回日期为该日期的所有记录在用户选择的开始日期和结束日期之间。我还希望用户可以选择仅搜索 StartDate 并将 EndDate 保留为空,因此该表基本上只有 2 个输入字段(如果 End Date 为空,则为 1 个)。

我现在有这个,它返回用户选择的日期,但只在那个日期:

(Date = @Date) AND (@Date BETWEEN @StartDate AND @EndDate)

@StartDate 是数据库中任何日期之前的日期。 @EndDate 是当天。这是为了防止用户输入的日期不在数据库的日期范围内,它会返回错误。

我已经尝试让参数@StartDate 等于@Date,所以当用户选择一个日期时,它会设置为开始日期。我也有输入字段供用户选择似乎有效的 EndDate。我只是无法让开始日期参数像我想要的那样工作。

这些是我尝试过的查询:

1.

(Date = @Date) AND (@StartDate = @Date) AND (@Date BETWEEN @StartDate AND @EndDate)

2.

(Date = @Date) AND (@Date BETWEEN @Date AND @EndDate)

如何修改此查询/参数以让用户在输入字段中选择开始日期和结束日期,并让表返回这些日期之间的所有记录?

【问题讨论】:

  • 尝试将所有三行的第一个AND关键字更改为OR

标签: mysql sql visual-studio date between


【解决方案1】:

(Date = @Date) AND ...

这将始终要求 Date 等于 @Date 为真,不管其他情况如何,除非出现一些 OR ...

假设这两个字段填写 @StartDate@EndDate(我不清楚,为什么会有第三个变量 @Date),您可能正在搜索类似的内容:

@EndDate IS NULL
AND Date = @StartDate
 OR Date BETWEEN @StartDate
                 AND @EndDate

如果@EndDate IS NULL(用户没有在相应字段中输入任何内容)Date = @StartDate 必须为真。否则Date BETWEEN @StartDate AND @EndDate (如果@EndDate IS NULL 永远不会是真的,以防万一你想知道)。

【讨论】:

  • 现在返回数据库中的所有记录。即使我的结束日期早于开始日期。
  • @derekg8881:请显示整个查询、表格(如CREATE 语句)、样本数据(如INSERT 语句)和变量中的值。请通过编辑您的问题来做到这一点。不要使用 cmets 或答案。
  • 您的原始答案确实有效。我不得不删除参数日期。日期是原始查询仅搜索单个日期。删除它并使 StartDate 可见,以便用户选择开始日期或如果结束日期为空则选择单个日期解决了问题。谢谢!
  • 另一个快速问题...由于您的原始答案有效,我有另一个服务器名称输入框。如何查询介于开始日期和结束日期之间的服务器名称?这是 where 子句,最后一个 OR 语句是我想要完成的尝试:(@EndDate IS NULL AND Date = @StartDate OR Date BETWEEN @StartDate AND @EndDate) OR (ServerName = @ServerName) OR (Date = @StartDate AND Date BETWEEN @StartDate AND @EndDate AND ServerName = @ServerName)
猜你喜欢
  • 2014-09-23
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2019-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-12-06
  • 1970-01-01
相关资源
最近更新 更多