【问题标题】:Using date range with multiple columns使用具有多列的日期范围
【发布时间】:2014-12-16 08:05:56
【问题描述】:

我有一个 mysql 查询准备按日期范围搜索:

select * from active_listings 
where open_date >= '$start_date' 
  AND open_date <='$end_date'

效果很好。

我在 mysql 中有两列:open_date 和 next_open_date。如何执行包含 open_datenext_open_date 的范围子句。

我试过了:

select * from active_listings 
where (open_date,next_open_date) >= '$start_date' 
  AND (open_date,next_open_date) <='$end_date')

我没有得到任何结果。

有人可以指导我或向我展示如何使用多列作为日期范围的说明。

谢谢!

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    为避免歧义,您必须像这样分隔范围:

    select * 
    from active_listings 
    where (open_date >= '$start_date' AND open_date <='$end_date') 
      OR (next_open_date >= '$start_date' AND next_open_date <='$end_date');
    

    或者,更短一点:

    select * 
    from active_listings 
    WHERE open_date BETWEEN '$start_date' AND '$end_date'
      OR next_open_date BETWEEN '$start_date' AND '$end_date';
    

    【讨论】:

    • 我怎样才能做一个包含 open_date 和/或 next_open_date 的范围?因为我有一些行有 open_date,一些行有 next_open_date。我想显示在 open_date 和 next_open_date 中选择了日期范围的所有行。
    • @Edward 嗯,只需将 OR 更改为 AND 然后?或者,您的意思是如果next_open_date 可用,则应该使用它,否则只能使用open_date?也许你所追求的一个例子可能会有所帮助:)
    • 我搞定了。或工作!谢谢@杰克!问题是我在错误的部分使用了 OR。
    【解决方案2】:

    不完全确定您想要什么...您是在尝试计算重叠时间段还是什么?

    提示:您可以使用 BETWEEN 子句替换“大于等于 AND 小于等于”条件的组合。

    SELECT * 
    FROM active_listings 
    WHERE 
        open_date BETWEEN '$start_date' AND '$end_date' OR
        next_open_date BETWEEN '$start_date' AND '$end_date'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2019-11-04
      • 2014-06-15
      • 2016-11-11
      • 2020-03-19
      相关资源
      最近更新 更多