如何用SQL查询一个时间段内的特定时间数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用SQL查询一个时间段内的特定时间数据?相关的知识,希望对你有一定的参考价值。

数据库有一列tm格式是8位datatime,存年月日时分秒。
现在我想查一个月内每天12点整的数据,命令如何写?

参考技术A datetime型的精度是微秒级的,楼上两位只写到秒,还是有出错的可能

将一个datetime取整(取到00:00)有3种方法:

convert(smalldatetime,convert(varchar,日期,112),112)

cast(cast(日期 as int) as smalldatetime)

dateadd(dd,datediff(dd,'2010-1-1',日期),'2010-1-1')

根据你的需求,用方法1,条件写成
where tm>='2010-3-1' and tm<'2010-4-1'
and tm=dateadd(hh,12,convert(smalldatetime,convert(varchar,tm,112),112))
参考技术B sql server
SELECT * FROM 表名 WHERE datepart(hour,tm)=12 and datepart(minute,tm)=0 and datepart(second,tm)=0 and datediff(month,tm,getdate())<1

access:用now()代替getdate()
oracle:用sysdate代替getdate()本回答被提问者和网友采纳
参考技术C SELECT * FROM 表名 WHERE Hour(tm)=12 and Minute(tm)=0 and Second(tm)=0

oracle db 如何用一条sql查询2个时间之间的工作时间间隔

例如:正常工作时间是9:00-12:00 ; 14:00-18:00
给定2个时间11-09 16:30 --- 11-10 14:30
我要的结果是 11-09 16:30-18:00 = 1.5h
11-10 9:00-12:00 = 3h
11-10 14:00-14:30 = 0.5h
则这个工作时间间隔是5h ;
我的一个思路是将2个时间差再减去中间的非工作时间;
另一个思路是直接能将2个时间中间非工作时间扣掉;
但不会写,请高手指点啊!!!!

你的时间保存数据类型是什么?date么?如果是date,判断时间点所属范围,如果开始时间属于14-18,结束时间属于9-12,并且时间相减的结果大于1,那么就可以得到结果为,时间相减(得到答案为天)*24-时间相减取整数(trunc)*17+2,如果如果开始时间属于14-18,结束时间属于9-12,并且时间相减的结果小于1,那么结果为,时间相减(得到答案为天)*24-15,其他情况均为时间相减(得到答案为天)*24-时间相减取整数(trunc)*17。
注:时间相减得到的应该是带有小数的。(这些是可以用case when语句搞定的,不过日期这块可能还需要调整,我仅仅靠想象是想不出来了,还要靠你自己试验)
如果是字符类型的,那么就用 to_date转一下,或者直接计算减法都可以,具体的判断和上面差不多。追问

的确是一种方法,感觉好复杂哦-_-!!!!

case 开始 when 9-12
case 结束 when 9-12
when 12-14

when 14-18

else

end
when 12-14

。。

when 14-18

。。

else

。。

end

追答

错了,不是这么写的是一个case when
类似
select case when 开始时间 14-18 and 结束时间 9-12 and 结束时间-开始时间>1 then (结束时间-开始时间)*24-trunc(结束时间-开始时间)*17+2 when 开始时间 14-18 and 结束时间 9-12 and 结束时间-开始时间<1 then (结束时间-开始时间)*24-15 else (结束时间-开始时间)*24-trunc(结束时间-开始时间)*17 end

参考技术A 先算两个日期相隔几天,记为dayBetween(日期相减);
dayBetween -1则为中间完整工作的天数,计时:(dayBetween -1)*7,
再加上开始时间(dataTime1)与当天结束时间的间隔以及结束时间与结束那天开始时间的间隔追问

例子给出的是比较好算的情况,如果开始时间在早上或者结束时间在早上,你的方法都没有扣掉中午的时间,还有更特殊的是开始时间,结束时间都有可能不是工作时间,我自己觉得是还有不少情况要考虑,所以如果需要满足条件的语句会好复杂!
有没有简单的实现方法呢?

以上是关于如何用SQL查询一个时间段内的特定时间数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何用sql语句查询在某一时间之后的数据

如何用sql查询某值类型字段各个记录中含有的特定数字?

如何用SQL语句取出数据库中的特定一条数据?

如何用sql语句筛选时间最新的数据

oracle db 如何用一条sql查询2个时间之间的工作时间间隔

如何用SQL语句查询Excel数据