关于时间的判断力,有没有更好的办法?

li_net 2018-04-20 08:04:33
如下:
---时间大于8:30和小于20:30为白班
select
case when (
datepart(HH,GETDATE())<'8'
or datepart(HH,GETDATE())>'20'
or (
datepart(HH,GETDATE())='8' and datepart(MINUTE,GETDATE())<'30'
)
or (
datepart(HH,GETDATE())='20' and datepart(MINUTE,GETDATE())>'30'
)
)
then '夜班' else '白班' end as d
---------------
上面语句可以运行,感觉有点费劲,有没有更好的方式?谢谢!
...全文
912 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
li_net 2018-04-20
  • 打赏
  • 举报
回复
TO楼上的,抱歉,已结贴,给不了分了,谢谢帮忙!!!
卖水果的net 2018-04-20
  • 打赏
  • 举报
回复

create table test(crdate datetime)
go
insert into test 
select dateadd(MI, number * 5, '2018-04-20')
from master..spt_values 
where type = 'p' and number < = 1440 / 5
go
select crdate, 
case when right(convert(varchar(16), crdate, 121), 5) between '08:30' and '20:00' then '白' else '夜' end
 from test
go
drop table test 
go

li_net 2018-04-20
  • 打赏
  • 举报
回复
我在测试你的代码时,也看到了。。。
li_net 2018-04-20
  • 打赏
  • 举报
回复
好的,谢谢,结贴。。。。
二月十六 2018-04-20
  • 打赏
  • 举报
回复
引用 2 楼 li_net 的回复:
[quote=引用 1 楼 sinat_28984567 的回复:]
SELECT CASE
           WHEN CONVERT(VARCHAR, GETDATE(), 8) > '08:30'
                AND CONVERT(VARCHAR, GETDATE(), 8) < '20:30' THEN
               '白班'
           ELSE
               '夜班'
       END AS 测试1,
	   CASE
           WHEN CONVERT(VARCHAR,  DATEADD(HOUR,2,GETDATE()), 8) > '08:30'
                AND CONVERT(VARCHAR,  DATEADD(HOUR,2,GETDATE()), 8) < '20:30' THEN
               '白班'
           ELSE
               '夜班'
       END AS 测试2
-------------------------- 谢谢版主!!但是这个结果只有一个列的,不能两列。。。。[/quote] 我是把两种情况都写了……你看判断的时间一个是8:20 一个是10:20,直接用那个第一个就行,后边的时间是DATEADD(HOUR,2,GETDATE()) 加了两个小时的
li_net 2018-04-20
  • 打赏
  • 举报
回复
引用 1 楼 sinat_28984567 的回复:
SELECT CASE
           WHEN CONVERT(VARCHAR, GETDATE(), 8) > '08:30'
                AND CONVERT(VARCHAR, GETDATE(), 8) < '20:30' THEN
               '白班'
           ELSE
               '夜班'
       END AS 测试1,
	   CASE
           WHEN CONVERT(VARCHAR,  DATEADD(HOUR,2,GETDATE()), 8) > '08:30'
                AND CONVERT(VARCHAR,  DATEADD(HOUR,2,GETDATE()), 8) < '20:30' THEN
               '白班'
           ELSE
               '夜班'
       END AS 测试2
-------------------------- 谢谢版主!!但是这个结果只有一个列的,不能两列。。。。
二月十六 2018-04-20
  • 打赏
  • 举报
回复
SELECT CASE
WHEN CONVERT(VARCHAR, GETDATE(), 8) > '08:30'
AND CONVERT(VARCHAR, GETDATE(), 8) < '20:30' THEN
'白班'
ELSE
'夜班'
END AS 测试1,
CASE
WHEN CONVERT(VARCHAR, DATEADD(HOUR,2,GETDATE()), 8) > '08:30'
AND CONVERT(VARCHAR, DATEADD(HOUR,2,GETDATE()), 8) < '20:30' THEN
'白班'
ELSE
'夜班'
END AS 测试2


22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧