如何用SQL查询一个时间段内的特定时间数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用SQL查询一个时间段内的特定时间数据?相关的知识,希望对你有一定的参考价值。
数据库有一列tm格式是8位datatime,存年月日时分秒。
现在我想查一个月内每天12点整的数据,命令如何写?
将一个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个时间中间非工作时间扣掉;
但不会写,请高手指点啊!!!!
注:时间相减得到的应该是带有小数的。(这些是可以用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
dayBetween -1则为中间完整工作的天数,计时:(dayBetween -1)*7,
再加上开始时间(dataTime1)与当天结束时间的间隔以及结束时间与结束那天开始时间的间隔追问
例子给出的是比较好算的情况,如果开始时间在早上或者结束时间在早上,你的方法都没有扣掉中午的时间,还有更特殊的是开始时间,结束时间都有可能不是工作时间,我自己觉得是还有不少情况要考虑,所以如果需要满足条件的语句会好复杂!
有没有简单的实现方法呢?
以上是关于如何用SQL查询一个时间段内的特定时间数据?的主要内容,如果未能解决你的问题,请参考以下文章