【问题标题】:Results from query where 2 date ranges intersect2 个日期范围相交的查询结果
【发布时间】:2012-12-11 14:30:35
【问题描述】:

所以我会试着解释一下:

我有日期选择器,您可以在其中选择 2 个日期(开始和结束)。

例如: 2012 年 1 月 1 日至 2012 年 11 月 12 日

现在我将使用这些日期在表格中搜索工作:

开始工作日期:2012 年 10 月 10 日 工作结束日期:20-12-2012

结果我想得到那份工作,因为这份工作在这两个日期之间运行。

我尝试使用 BETWEEN,但这似乎对我不起作用。有人可以帮我查询吗?当然,我将日期格式转换为 yyyy-mm-dd。

重点是即使只有 1 天在 datepicker 日期范围内,我也想展示这份工作。

【问题讨论】:

  • mySQL 期望 YYYY-MM-DD 的日期格式为 DATEDATETIME 字段。这可能就是它不起作用的原因。你的日期选择器可能有格式化选项
  • 当然,我将日期格式化为 yyyy-mm-dd。当日期范围在日期选择器的日期范围内时,我仍然只得到结果。关键是我想展示这份工作,即使只有 1 天在 datepicker 日期的范围内。

标签: php date range


【解决方案1】:

您正在寻找 2 个日期范围的交集。因此,给定日期范围 d1 和 d2,您知道 d2.start 必须在 d1.end 之前发生。您还知道 d2.end 必须在 d1.start 之后发生。如果两个条件都为真,那么你就有重叠。在 SQL 中:

SELECT d.* 
FROM thedates d
WHERE d.jobstart < $myenddate
  AND d.jobend > $mystartdate

为了清楚起见,ETA 图:

【讨论】:

  • 我刚试过这个,它很完美,我得到了我想要的确切结果!它是如此简单,但我觉得还不够简单……谢谢!
  • @Kenny:很高兴它有用。我添加了一个图表来说明推理。当我第一次开始比较范围时,把它画出来很有帮助。
【解决方案2】:

只需将语句用作

SELECT * FROM dummydb.tblorders t where t.date_purchased >= '2012-03-24 00:00:00' and t.date_purchased <= '2012-03-24 23:59:59';

【讨论】:

  • 不行,因为 JOB 的范围也可以在日期选择器的范围之外。关键是我想展示这份工作,即使只有 1 天在 datepicker 日期的范围内。
  • 如果您为我使用 datepicker,如果您要求在两个日期之间获取价值,那就是 javascript,这是 MySql 解决方案。
  • 这与日期选择器无关。用于 SQL 时,日期将保存并格式化为 yyyy-mm-dd。我不是在问如何格式化日期:)
  • 在这种情况下使用 count 并将其保存到某个变量并检查 count 是否大于 1 然后不显示 set @variable = SELECT count(*) FROM dummydb.tblorders t where t.date_purchased >= '2012-03-24 00:00:00' 和 t.date_purchased
  • 感谢您的帮助,但我会采用 dnagirl 给我的解决方案。
猜你喜欢
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多