sql时间段判断
本帖最后由 luozh29 于 2013-09-25 10:12:28 编辑
请求各位大神,一个sql时间段判断问题:
如:数据库中定义, 07:00--17:00为白班 17:00--07:00 为夜班 现在一条记录时间为:2013-08-21 17:54:44.780 我如何判断这条记录是哪个班别?如给出解决,小弟感激不尽!
------解决方案--------------------如果只有白班和夜班的话可以这样
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和码表关联 然后一样的查询