【问题标题】:Select records between two dates in two columns在两列中选择两个日期之间的记录
【发布时间】:2009-09-25 19:14:58
【问题描述】:

如何在两列中选择两个日期之间的记录?

Select * From MyTable Where 2009-09-25 is between ColumnDateFrom to ColumnDateTo

我有一个日期 (2009-09-25),我想选择时间范围 ColumnDateFrom 到 ColumnDateTo 中的记录。

样本

记录 1 ColumnDateFrom = 2009-08-01 AND ColumnDateTo = 2009-10-01

记录 2 ColumnDateFrom = 2010-08-01 AND ColumnDateTo = 2010-10-01

如果我输入的日期是 2009-09-28;然后我得到记录 1

【问题讨论】:

  • 这是哪个特定的数据库引擎?您将如何将日期作为嵌入式文字(即作为 SQL 的一部分)或作为参数传递给 SQL?您使用什么客户端框架与数据库通信?你的问题基本上是什么? SQL 语法?如何用 C# 或 php 或其他方式编写它?要不然是啥?因为,从想法上讲,你是对的,除了写日期的语法是关闭的(但我需要知道你正在使用哪个数据库引擎来告诉你什么是正确的)。

标签: sql sql-server sql-server-2005 tsql


【解决方案1】:

标准之间应该可以工作 (T-SQL)。

SELECT * FROM MyTable WHERE @MYDATE BETWEEN ColumnDateFrom AND ColumnDateFrom

【讨论】:

    【解决方案2】:

    如果我理解正确,试试这个:

    SELECT
        *
        FROM MyTable 
        WHERE ColumnDateFrom <= '2009-09-25' AND ColumnDateTo >= '2009-09-25'
    

    【讨论】:

    • 很好,但我更喜欢... select * from MyTable where '2009-09-25' between ColumnDateFrom 和 ColumnDateTo
    • 非常感谢您的快速回复...非常好!我现在完成了,可以回家了……祝大家周末愉快!
    • 我从不使用 BETWEEN,我发现 >=、>、
    【解决方案3】:

    试试这个:

    SELECT * FROM MyTable WHERE '2009-09-25' BETWEEN ColumnDateFrom AND ColumnDateTo
    

    【讨论】:

      【解决方案4】:
      select * 
      from MyTable 
      where ColumnDateFrom <= '2009-09-25' 
          and ColumnDateTo >= '2009-09-25'
      

      【讨论】:

        【解决方案5】:

        mysql:

        select * from MyTable where '2009-09-25' between ColumnDateFrom and ColumnDateTo
        

        【讨论】:

          【解决方案6】:

          只需删除“是”

          Select * From MyTable 
          Where '2009-09-25' Between ColumnDateFrom to ColumnDateTo
          

          如果列值中包含日期和时间,请记住考虑时间部分... (假设 DateOnly() 是一些从日期时间列中删除时间的函数)

          Select * From MyTable 
          Where '2009-09-25' Between DateOnly(ColumnDateFrom) 
                                  To DateOnly(ColumnDateTo)
          

          【讨论】:

          • 这个对日期列的函数调用会阻止任何索引的使用,不是吗?
          【解决方案7】:

          这里是 ms 访问 vba 的示例

          "[LearningBegin]<= " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd]>=" + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + _
          " or [LearningBegin]>= " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd]<=" + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + _
          " or [LearningBegin] between " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and " + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd]<=" + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + _
          " or [LearningBegin] between " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and " + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd]>=" + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + _
          " or [LearningBegin] >= " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd] between" & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and " + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#") + _
          " or [LearningBegin] <= " & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and [LearningEnd] between" & Format(eFilterBegin.Value, "\#mm\/dd\/yyyy\#") + " and " + Format(eFilterEnd.Value, "\#mm\/dd\/yyyy\#")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-06-10
            • 2011-11-03
            • 2017-02-03
            相关资源
            最近更新 更多