SQL语句如何查询某个时间节点的前后数据?

例如 8点40分前后的数据,如图:如何截取到这两条记录?

敲入:1234567select top 1* from tablewhere FinishTime>'2016-01-01 08:00:00.000'order by FinishTimeunion allselect top 1* from tablewhere FinishTime<'2016-01-01 08:00:00.000'order by FinishTime desc

    时间节点是一个很抽象和应用很广泛的概念,通俗的说就是某个大环境中的一个点或者一段,好比公交车线路中的一个站台。比如在工期计划,或者工作计划等里面体现较多。 以工期计划为例,时间节点可以代表工程的某个阶段或者某个里程碑的点,而此阶段或这个里程碑之前的工作需要在某个时间之前完成,这就是工程中经常提到的时间节点。 其他行业也是一样的,譬如某软件的开发工作需要在某时完成,调试工作某时完成,销售推广某时完成等,都是时间节点。

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-05-03

暂时没想到特别好的方法,只能用笨方法写,不然只能写个游标。时间是个复杂的东西,不要把时间想的太简单:

select top 1* from table
where FinishTime>'2016-01-01 08:00:00.000'
order by FinishTime
union all
select top 1* from table
where FinishTime<'2016-01-01 08:00:00.000'
order by FinishTime desc

追问

那如果这个8:40是每天的呢? 例如按照一个时间段查询如:2015-10-1号之2015-10-8 号
就是说:查询2015-10-1号到2015-10-8 号这段时间内所有的8:40分前后的两条数据。

追答

那么你需要使用存储过程,写一个循环来实现。变量输入一个开始日期和结束日期,然后在存储过程里面拼凑出一个时间来。然后在循环内进行判定。如果你设定的高级一点,那么可以多几个变量,比如第一个变量是开始时间,第二个变量为结束时间,最后一个变量为时分秒。然后在存储过程中进行变量拼凑成时间,然后用while循环去比较,返回结果即可。因为时间是个可变的变量,那么整个SQL就是个动态的SQL了,并不是静态的SQL了。如果你的时分秒是死的,那么你只要开始时间和结束时间,其余的在存储过程中写死就行了。

本回答被提问者采纳
第2个回答  2017-05-03
select * from tableName
where 
FinishTime=(select MAX(FinishTime) from tableName where FinishTime<='2016-01-01 08:40')
or 
FinishTime=(select Min(FinishTime) from tableName where FinishTime>'2016-01-01 08:40')

追问

那如果这个8:40是每天的呢? 例如按照一个时间段查询如:2015-10-1号之2015-10-8 号
就是说:查询2015-10-1号到2015-10-8 号这段时间内所有的8:40分前后的两条数据。

追答select * from tableName 
where 
(FinishTime in(select MAX(FinishTime) from tableName 
where FinishTime<=left(FinishTime,10)+' 08:40' group by left(FinishTime,10))
or 
FinishTime in(select Min(FinishTime) from tableName 
where FinishTime>left(FinishTime,10)+' 08:40' group by left(FinishTime,10))
) and (FinishTime between '2015-10-1' and '2015-10-8')

本回答被网友采纳
相似回答