startDate和endDate是需要检验的开始日期和结束日期
startTime和endTime是需要检验的开始时间和结束时间
BeginDate和EndDate是数据库中的开始日期, 结束日期
同理,BeginTime和EndTime是数据库中的开始时间和结束时间
语句该如何去写,判断需要检验的日期时间范围,是否与数据库中的有重叠?
SELECT * FROM TA
WHERE CAST((BeginDate+' '+BeginTime) AS datetime) between startDate+' '+startTime and endDate+' '+endTime
AND CAST((EndDate+' '+EndTime) AS datetime) between startDate+' '+startTime and endDate+' '+endTime
试下这样写
楼上神仙漏了场景,这个只判断了查询点是否都在数据区间内,实际要求的应该是任意一秒有重叠就算满足
首先,这个日期加时间的思路是没问题的,但是要注意字段格式,最终都要转换成datetime类型以方便做判断
然后, 归纳可能性,假设有一个时间数轴,
A.两个查询点都在数据开始点的左侧,或者都在数据结束点的右侧,此时不满足条件
B.至少其中一个查询点落在了数据开始点和数据结束点之间,此时满足条件
C.查询开始点在数据开始点左侧且查询结束点在数据结束点右侧,此时也满足条件
因此,把B和C用OR连起来做条件就行了,或者直接NOT A条件