sql-server - SQL Server 查询中的三个 Shift 明智日期时间检查
问题描述
我在我的一个项目中检查 sql 查询时遇到问题。实际上,我必须根据 SHIFTNAME 获取记录,即关于日期的 firstshift、secondshift 和 thirdshift。
我们有以下班次时间,班次将采用 24 小时制
ShiftId ShiftName ShiftFrom ShiftTo
-----------------------------------------------
1 First Shift 07:00 12:00
2 Second Shift 12:00 22:00
3 Third Shift 22:00 07:00
我的问题是我在 shift1 和 shift2 中正确获取记录,但记录不在 shift3 中。我正在四处走动,以解决这个问题。我正在使用以下搜索查询来获取所有班次中的记录
select case when convert (varchar(5),GETDATE(),108) between (
select ShiftFrom
from tbl_Shift_Master
where ShiftId = 1
) and (
select ShiftTo
from tbl_Shift_Master
where ShiftId = 2
) then 1 else 2 end as ShiftId
解决方案
您可以在不将班次时间存储在变量中的情况下执行此操作,但对我来说似乎更清楚:
DECLARE @ST1_S TIME
,@ST1_E TIME
--
,@ST2_S TIME
,@ST2_E TIME
--
,@ST3_S TIME
,@ST3_E TIME;
SELECT @ST1_S = CASE WHEN ShiftId = 1 THEN ShiftFrom ELSE @ST1_S END
,@ST1_E = CASE WHEN ShiftId = 1 THEN ShiftTo ELSE @ST1_E END
--
,@ST2_S = CASE WHEN ShiftId = 2 THEN ShiftFrom ELSE @ST2_S END
,@ST2_E = CASE WHEN ShiftId = 2 THEN ShiftTo ELSE @ST2_E END
--
,@ST3_S = CASE WHEN ShiftId = 3 THEN ShiftFrom ELSE @ST3_S END
,@ST3_E = CASE WHEN ShiftId = 3 THEN ShiftTo ELSE @ST3_E END
FROM tbl_Shift_Master;
SELECT CASE
WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST1_S AND @ST1_E THEN 1
WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST2_S AND @ST2_E THEN 2
WHEN convert (varchar(5),GETDATE(),108) BETWEEN @ST3_S AND @ST3_E THEN 3
END
推荐阅读
- css - 视口断点是否应该影响 Twitter Bootstrap 中断点区域之外的区域?
- python - JSONDecodeError:期望值:第 1 行第 1 列(字符 0)---Python
- perl - 在 Moose 中,我如何需要多个属性之一?
- unity3d - Unity 中的原生纵横比是什么意思?
- google-data-studio - 谷歌数据工作室 - 当我在 CPC 上进行乘法运算时得到的值不正确
- javascript - 尝试将函数作为参数传递时,我错过了什么额外的步骤?
- python - 我的 Python-MYSQL 程序在运行几个小时后就永远休眠了,但这不是内存泄漏
- wordpress - 我从我的网站邮件中收到一封邮件,说我的 wordpress 网站被黑了?
- javascript - Javascript: Cannot set member variable from callback
- bash - 使用 BASH 为目录中的每个文件设置自定义时间和增量