【问题标题】:Select where datetime start greater than and end less than选择日期时间开始大于和结束的位置
【发布时间】:2021-11-14 23:17:25
【问题描述】:

我有一个包含开始和结束字段的表格,其值如下:

start               | end
2021-09-24 17:00:00 | 2021-10-01 08:00:00

我一头雾水,不明白为什么这个说法什么都没有:

SELECT *
FROM `oncall`
WHERE `start` >= '2021-10-01 02:00:00'
AND   `end`   <= '2021-10-01 08:00:00'

虽然我的示例行中的日期范围包含上述范围。

我正在尝试查找与数据库中值的开头和结尾重叠的任何行。

【问题讨论】:

  • startend 列的数据类型是什么。
  • 那些DATE_FORMAT() 的所作所为有点像A = A
  • 两列都是 DATETIME
  • 我知道 FORMATE 什么都不做,抓着稻草
  • 我会选择WHERE `start` &gt;= '2021-10-01 02:00:00' AND `end` &lt;= '2021-10-01 08:00:00'

标签: mysql sql datetime date-range


【解决方案1】:

查看您的数据库中的条目和您正在使用的查询,看起来您实际上是在寻找一个日期间隔 overlap 查询,即一个查询检查[2021-10-01 02:00:00, 2021-10-01 08:00:00) 是否以某种方式与[2021-09-24 17:00:00, 2021-10-01 08:00:00) 重叠。

SELECT *
FROM `oncall`
WHERE @d2 > `start` AND `end` > @d1

-- replace @d1 and @d2 with actual values

请注意,此查询适用于所有类型的重叠。例如,如果您的数据库中有这对日期:

2021-10-11 | 2021-10-15

那么所有这些输入对都会匹配:

2021-10-01 | 2021-10-12
2021-10-14 | 2021-10-20
2021-10-01 | 2021-10-20
2021-10-11 | 2021-10-14

【讨论】:

  • 谢谢你,只是没看到。
  • 也许您可以更新问题,以便它给出一个模糊的想法,这实际上是您想要实现的目标
猜你喜欢
  • 2020-03-02
  • 2016-08-21
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多