我澄清了我想要查询的方式。
我想要获取特定时间范围内的记录。
我在 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'
我有一排。
在表A中我的范围如下:
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
.
.
.
等等。
在表B中,我有行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的开始和结束时间如下:
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
答案 0 :(得分: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的开始时间。