Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql在两小时之间获取可用记录_Sql_Sql Server 2008 - Fatal编程技术网

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);