日期:2014-05-17  浏览次数:20626 次

sql时间段判断
本帖最后由 luozh29 于 2013-09-25 10:12:28 编辑
请求各位大神,一个sql时间段判断问题:
   如:数据库中定义,   07:00--17:00为白班    17:00--07:00 为夜班  现在一条记录时间为:2013-08-21 17:54:44.780 我如何判断这条记录是哪个班别?如给出解决,小弟感激不尽!
sql 数据库

------解决方案--------------------
如果只有白班和夜班的话可以这样

SELECT CASE WHEN  DATENAME(hh,GETDATE()) BETWEEN 7 AND 17 THEN '白班' ELSE '夜班' END 
/*----
白班

(1 行受影响*/

------解决方案--------------------
那你列出所有情况 一样的用CASE WHEN 解决。
------解决方案--------------------
SELECT CASE WHEN  CONVERT(TIME,GETDATE()) BETWEEN '07:00:00' AND '17:30:00' THEN '白班' ELSE '夜班' END 
------解决方案--------------------

declare @setdate datetime
set @setdate='2013-08-21 17:54:44.780'
select case when  DATEPART(hour,@setdate)>=7 and DATEPART(hour,@setdate)<17 then 1
 when DATEPART(hour,@setdate)>=17 and DATEPART(hour,@setdate)<24 then 2
 when DATEPART(hour,@setdate)>=1 and DATEPART(hour,@setdate)<7 then 2
 else 0 end as datetimeType

------解决方案--------------------
一串case when then when then ,管他有多少班次呢
------解决方案--------------------
SELECT CASE WHEN  CAST(REPLACE(convert(VARCHAR(5),GETDATE(),108),':','') AS INT) BETWEEN 730 AND 1730 THEN '白班' ELSE '夜班' END 
/*----
白班

(1 行受影响*/

------解决方案--------------------
首先你要获取每个班别的范围,我的语句是截取时间部分,这样可以使得17:30:01都可以精确。
------解决方案--------------------
应该这样 你的班别表是一个码表 也就是一个固定的表 设置ID

你排班的这个表也设置班别ID和码表关联 然后一样的查询