0

我有一个澄清我想查询的方式。

我想获取位于特定时间范围内的记录。

我在表A中有一条记录,其开始时间为1900-01-01 21:00:00.0 ,结束时间为1900-01-01 22:00:00.0

我还有另一个表B,它的 startTime 为1900-01-01 21:47:43.0和 endTime 为1900-01-01 21:47:48.0

现在我的任务是找到表 A 中具有表 B 的 startTime 和 endTime 的所有条目。

最初我用作查询如下:

select *
from A
where startTime between '1900-01-01 21:47:43.0' and '1900-01-01 21:47:48.0'

我没有得到任何结果。

然后我尝试了以下查询

select *
from A
where startTime < '1900-01-01 21:47:43.0' and startTime > '1900-01-01 21:47:48.0'

我得到了一排。

在表中,AI 的范围如下:

1900-01-01 21:00:00.0 - 1900-01-01 22:00:00.0
1900-01-01 22:00:00.0 - 1900-01-01 23:00:00.0
1900-01-01 23:00:00.0 - 1900-01-01 23:30:00.0
.
.
.

等等。

在表 BI 中有行 start 和 endTimes 像

1900-01-01 21:27:30.0 - 1900-01-01 21:27:55.0
1900-01-01 22:11:22.0 - 1900-01-01 22:11:44.0
1900-01-01 23:22:11.0 - 1900-01-01 23:22:55.0
.
.
.
and so on.

我必须从表 B 中获取 startTime 和 endTime 并匹配表 A 中的插槽并获得结果。

我的第一种查询方式是否正确,第二种方式是否正确,或者是否有任何其他方式可以做到这一点。

编辑

由于我们试图在存在范围的表 A 中查找记录,因此我尝试使用 B 的 start 和 endTimes,如下所示:

select *
    from A
        and '1900-01-01 21:47:43.0' between startTime and endTime
        and '1900-01-01 21:47:48.0' between startTime and endTime
4

1 回答 1

0

我认为最简单的方法是使用 BETWEEN 加入表格

SELECT A.*
FROM A
JOIN B
ON b.start_time BETWEEN a.start_time AND a.end_time
AND b.end_time BETWEEN a.start_time AND a.end_time

这将返回 A 中的所有内容,其中 B 的开始和结束时间都由 A 中的范围封装。

您的第二个查询看起来不太正确,因为您正在比较双方的 start_time,但这个想法与此类似:

SELECT A.*
FROM A
JOIN B
ON a.start_time < b.start_time
AND a.end_time > b.end_time

任一查询都应返回 A 的范围,该范围封装了 B 的开始结束时间。

于 2013-06-04T02:54:55.807 回答