SQL server中关于时间段的查询

我现在在做一个查询,将一天分为4段时间(0:00-6:00、6:00-12:00、12:00-18:00、18:00-24:00),现在随便给定一个时间,比如17:28分,就要把12:00-18:00之间的所有数据都查询出来,小弟初学SQL,望大家多指导,谢谢

我们 还是可以互相学习的 。 这个一同坐等大神解答

楼主的思路应该出错了,应该是输入一个时间范围,把范围内的东西查出来,而不是输入一个时间点去查一个范围

除非是,那个范围已经定义好字段,判断你输入的时间点属于哪个范围,然后查询数据

同意楼上,写个判断语句。

可以建一个时间段的字典表。这样也好维护。到时候关联查询就行了

你在前台输入17:28的时候,就在前台算出来12:00-18:00 ,然后把12:00-18:00带到sql里查询

时间分隔存在一个小漏洞 用户输入12:00点时 查询的时间段不明确, 是该查6:00--12:00 还是 12:00--18:00 还是都查出来 做法前几楼已经提供了思路 无新的补充

楼主是要一个类似于

 SELECT   * from  t WHERE date >= HOUR(楼主的日期) AND  date <=HOUR(楼主的日期)+1

这样的语句吗?

前台 输入时间 进行匹配 然后到后台查询 主要写sql查询语句 把每个时间段写一个统一地属性 根据一个 去查全部信息

是的,前面几位友人,已经提供思路了,要给定一个范围值。而且最好用字典表,这样在后期维护中好维护点。

create table #t
(
cdate datetime
)

insert into #t values('2017-01-01 05:00:00')
insert into #t values('2017-01-01 07:00:00')
insert into #t values('2017-01-01 13:00:00')
insert into #t values('2017-01-01 21:00:00')
insert into #t values('2017-01-02 05:00:00')
insert into #t values('2017-01-02 13:00:00')

--(0:00-6:00、6:00-12:00、12:00-18:00、18:00-24:00)
declare @s time ='17:28'
select * from #t
where datepart(hour,@s) between case when DATEPART(hour,cdate) <6 then 0 when DATEPART(hour,cdate)<12 then 6
when DATEPART(hour,cdate)<18 then 12 when DATEPART(hour,cdate)<24 then 18 end and
case when DATEPART(hour,cdate) <=6 then 6 when DATEPART(hour,cdate)<12 then 12
when DATEPART(hour,cdate)<18 then 18 when DATEPART(hour,cdate)<24 then 24 end

drop table #t

这个你要注意下每个时间段的边界值