检索特定日期范围之间的记录

时间:2015-06-25 22:07:21

标签: sql

我有一张类似的表:

@property (nonatomic, strong) NSLayoutConstraint *heightConstraint;

如何在开始和结束时间的条件下实现查询 06-24-2015 08:00和06-24-2015 09:00我得到前两个记录,如果开始和结束时间是06-24-2015 08:00和06-24-2015 09:15我得到前三个记录。同样在条件下如果开始和结束时间是06-24-2015 08:15和06-24-2015 09:15我需要获得前三个记录

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

Declare @starttime datetime = '6-24-15 08:00:00'
Declare @endtime datetime = '6-24-15 09:00:00'

Select * from MyTable
where StartTime <= @endtime and endtime >= @starttime

根据需要更改前两行以调整搜索窗口。另外,我认为您的专栏真的是starttime,而不是sarttime - 如果我猜错了,可能需要调整代码。

根据项目的要求,您可能需要将>=调整为>等。

答案 1 :(得分:0)

我没有看到您使用的是哪个平台,因此请注意以下内容适用于MSSQL Server。

如果您的“StartTime”和“EndTime”列在SQL中被定义为日期时间类型,那么服务器将把您的查询转换为适当的类型。在这里,您可以在http://www.xxx.xxx/~account子句中使用普通的&gt;,&lt;,=运算符(如果您愿意,可以使用WHERE)来完成您要执行的操作。

就你问题的第二部分而言,如果你基本上希望在你的结束时间中包含(可选的)15分钟“滞后”并且在你的开始时间内“推”15分钟,你可以使用BETWEEN做类似的事情:

DATEADD

这当然只有在您的数据仅以整数或半小时为增量表示时才有意义。

下面列出的SELECT * FROM [myTable] WHERE (StartTime >= @startTime AND EndTime <= @endTime) OR (StartTime >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) OR (DATEADD(minute, 15, StartTime) >= @startTime AND EndTime <= @endTime) OR (DATEADD(minute, 15, StartTime) >= @startTime AND DATEADD(minute, -15, EndTime) <= @endTime) 文档:

https://msdn.microsoft.com/en-us/library/ms186819.aspx

希望这有帮助!