【问题标题】:Getting rows between date range in mysql在mysql中获取日期范围之间的行
【发布时间】:2012-09-09 15:49:37
【问题描述】:

我遇到了一个我无法弄清楚的严重问题。我正在尝试从 MySQL 数据库返回两个给定日期之间的开始日期和结束日期的行。这是我查询数据库的php代码:

$getRooms = mysql_query("
    SELECT * 
    FROM Tarifas 
    WHERE Start BETWEEN '2013-01-10' AND '2013-01-13' 
    AND   End   BETWEEN '2013-01-10' AND '2013-01-13'
");

开始和结束设置为日期字段

我的数据库设置如下:

ID | RoomId | Start      | End
--------------------------------------
4  | 34562  | 2013-01-09 | 2013-10-23

如果有人能帮我弄清楚为什么这不起作用,将不胜感激!

【问题讨论】:

  • 您是否遇到 PHP 或 MySQL 错误?
  • 除非您提供的数据不正确,否则您在表格中的结束日期为2013-10-23,但您正在寻找end 日期BETWEEN '2013-01-10' AND '2013-01-13' - 数据不匹配所以你不会得到任何结果。
  • 您有符合此条件的记录吗?
  • StartEnd 列的类型是什么? (您能给出创建Tarifas 表的语句吗?)
  • 您是否正在检查日期冲突(例如,当整个日期范围或其中一部分位于数据库中存储的日期范围内时)?

标签: php mysql sql date datetime


【解决方案1】:

查看您的查询和示例数据,您可能正在寻找SQL Query to Find Overlapping or Conflicting Date Ranges。查询将是:

SELECT *
FROM Tarifas 
WHERE '2013-01-13' >= `Start` AND `End` >= '2013-01-10'

2013-01-13 大于 2013-01-09 -- 并且 -- 2013-10-23 大于 2013-01-10 因此将返回 Tarifas #4,因为它与指定日期冲突/重叠。

【讨论】:

  • 他只说“我正在尝试从 MySql 数据库返回具有两个给定日期之间的开始日期和结束日期的行。”
  • 我只是从示例数据和查询中推断出这一点(以及我对预订“房间”和房价计划的了解很少)。输入范围是 2013-01-132013-01-13,他可能希望返回第 4 行。
  • 这很好,我只需要稍微修改一下 WHERE start_date= 'mydate' 非常感谢
猜你喜欢
  • 1970-01-01
  • 2016-09-21
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多