sql在两小时之间获取可用记录
我有一个具有以下值的表我需要显示按计划提供的名称sql在两小时之间获取可用记录,sql,sql-server-2008,Sql,Sql Server 2008,我有一个具有以下值的表我需要显示按计划提供的名称 例如: If the hours is 20:30 the query return Kim If the hours is 11:00 the query return David, Jess 我有这个,但当我需要返回Kim或Mike的名字时,它不起作用 SELECT Name FROM employees WHERE (EntryTime > @time AND ExitTime < @time) AND (
例如:
If the hours is 20:30
the query return Kim
If the hours is 11:00
the query return David, Jess
我有这个,但当我需要返回Kim或Mike的名字时,它不起作用
SELECT Name FROM employees
WHERE (EntryTime > @time AND ExitTime < @time)
AND (@time not between BreakStart AND BreakEnd)
从员工中选择姓名
其中(入口时间>@time和出口时间<@time)
和(@时间不在BreakStart和BreakEnd之间)
从“Kim”的例子中,你似乎不在乎休息。我认为以下是你想要的逻辑:
SELECT Name
FROM employees
WHERE (EntryTime < ExitTime and @time between EntryTime and ExitTime) or
(ExitTime < EntryTime and @time not between ExitTime and EntryTime);
选择名称
来自员工
其中(EntryTime
我一般不主张在日期和时间之间使用'between'。在本例中,它使逻辑可读。我在解释您的表时遇到问题。让我们看看大卫。他早上6点出现。到目前为止听起来很合理。他的休息时间在12小时后的下午6点开始。听起来不对。然后他整晚都在休息,第二天早上6:30结束休息。这听起来也不像是休息。然后他回到家里呆了一个半小时,然后回家。这真的是这么说的吗?标题可能应该是
Name | EntryTime | ExitTime | BreakStart | BreakEnd
,这是因为进入到中断时间的时间跨越午夜,您需要在其中输入一个日期,或者您需要根据持续时间对表进行修改,例如Kim在18:00开始,工作12小时,然后12:00重新开始,工作1小时。对不起,我输入了列的名称。XD仍然是一期跨越午夜的19:00>06:00。。
SELECT Name
FROM employees
WHERE (EntryTime < ExitTime and @time between EntryTime and ExitTime) or
(ExitTime < EntryTime and @time not between ExitTime and EntryTime);