【问题标题】:How can I find all results on a date between two dates?如何在两个日期之间的某个日期找到所有结果?
【发布时间】:2014-07-25 12:29:24
【问题描述】:

在 SQL Server 表中有两个日期:开始日期时间和结束日期时间。现在我想搜索某个日期时间的所有结果。比如这张表:

id|name|starttime|endtime
1|Peter|2014-07-22 07:00|2014-07-22 15:00
2|John|2014-07-22 08:00|2014-07-22 17:00
3|Martin|2014-07-22 07:30|2014-07-22 12:00

现在我想要在 2014-07-22 07:50 匹配的所有结果

我查看了BETWEENDATEDIFF,但认为这不起作用。

【问题讨论】:

  • 提示:您想查找日期出现在开始时间之后和结束时间之前的结果。
  • 是的,这是结论,但我怎样才能达到这个目标?
  • 阅读它并将逻辑分解成更小的部分,那么它非常简单。
  • 是的,你是对的,这很简单:-)

标签: sql-server sql-server-2008 tsql sql-server-2008-r2


【解决方案1】:

试试这个:

Select *
From YourTable
Where StartDate <= @YourDate
  and EndDate >= @YourDate

【讨论】:

    【解决方案2】:

    有什么问题 SELECT * FROM Table WHERE @Parameter BETWEEN startTime AND endTime ?

    【讨论】:

    • 如果我设置了开始日期和结束日期,我可以在其中设置我正在寻找的日期时间?
    • 好的 - 我想你是在问“我不知道如何将参数传递给一段 SQL 以便将其值与数据库中保存的数据进行比较”?在这种情况下,答案很大程度上取决于您使用的是什么工具——SQL 企业管理器? .net 编程语言?
    【解决方案3】:

    分解你的逻辑,你想在your date occurs after starttime your date occurs before endtime找到结果。

    进一步分解,你有两个条件:

    1. 您的日期 > 开始时间
    2. 你的日期

    所以现在我们可以编写我们的 SQL:

    SELECT *
    FROM YourTable
    WHERE @YourDate > starttime
    AND @YourDate < endtime
    

    请注意,您没有指定您指定的时间是否可以恰好发生在开始时间或结束时间。因此,将&lt; 替换为&lt;= 并将&gt; 替换为&gt;=

    还有其他方法可以实现相同的目标,但这说明了如何将问题分解为更小的部分,这通常是编写 SQL 查询时解决问题的途径。

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 1970-01-01
      • 2020-10-25
      • 2018-09-15
      • 2016-01-04
      • 2011-02-13
      • 2015-01-08
      • 2021-11-01
      • 2013-08-09
      相关资源
      最近更新 更多